2014-10-20 2 views
0

332 개의 파일 디렉토리를 통과하는 함수를 작성하려고합니다. 각 파일에는 대기 오염 값의 데이터 프레임이 들어 있습니다. 두 개의 기둥은 질산염과 황산염입니다.R 3.1.1의 파일을 루핑하는 동안 벡터에 cor() 값을 추가하십시오.

각 파일을 검토 할 때 전체 사례에 대한 임계 값 기준을 충족하는지 확인해야합니다. 기본적으로 코드는 N/A 또는 누락 된 값이있는 행을 생략해야합니다. 만약 그들이 기준을 충족한다면, 나는 cor() 함수를 사용하여 질산염과 황산염 간의 상관 관계를 계산해야 할 것입니다.

내 의사입니다 : 내가 수동이를 작성할 때

corr <- function(directory, threshold = 0){ 
setwd(paste("C:/...", directory, sep = "/")) 

# Writing from here on works fine 

correlations <- numeric() 
files <- list.files(getwd(), full.names = TRUE) 
for (i in 1:332) { 
    read_file <- read.csv(file[i]) 
    complete_observation <- read_file[complete.cases(read_file), ] 
    get number_complte using nrow 
    if (number_complete >= threshold) { 
     attach(complete_data) 
     correlations <- c(correlations, cor(sulfate, nitrate)) 
     detach(complete_data) 
    } 
} 

(주석부터 시작), 그것을 잘 작동하고 나는 특정의 상관 벡터이다 내가 찾고 있어요 결과를 얻을 길이.

그러나 내가 만든 함수 (코드의 시작 부분부터)를 호출하여 시도하면 NULL 벡터가 생깁니다. 나는 cor 데이터를 추가 한 후 반환 값 (상관 관계)을 중첩 할 때 조건을 충족시키고 끝에 저장하는 상관 값을 계산한다는 것을 나타내는 단일 값을 리턴했지만 루프를 빠져 나오면 012로 다시 초기화됩니다.

이렇게하면 수동으로 입력 할 때 이런 식으로 작동하지 않았기 때문에 이것은 당황합니다.이 동작은 함수를 실행할 때만 발생합니다. 두 경우 모두 함수의 동작에는 차이가 없어야합니다. 이 문제를 어떻게 해결할 수 있습니까?

+0

에 오신 것을 환영합니다 SO에 대해 기본적으로 각 한 후, 두 번째 닫는 대괄호 후 return 문을 배치하여에 내가 원하는 방식으로 작동하는 내 기능을 얻을 수있었습니다! 작성한 코드를 업로드 할 수 있습니까? 코드와 샘플 데이터를 제공하면 누군가로부터 도움을받을 수 있습니다. – jazzurro

+0

@jazzuro 감사합니다. 수정으로 추가해야합니까? 내가 코멘트로 추가하려고했지만 제대로 포맷 할 수 없었어요. – Astro

답변

0

나는 루프 반복

corr <- function(...){  
correlation <- numeric() 
    for(...){ 
    ... 
    if (num_com >= threshold){ 
    correlation <- c(correlation, cor(x,y)) 
    correlation <- c(correlation, cor(data$nitrate, data$sulfate)) 
    } 
    } 
    return(correlation) 
} 
관련 문제