목표: 완전한 케이스(임계값 인수)에 대한 사용자 정의 기준을 충족하는 여러 파일에 대한 2개 변수 간의 상관 계수를 계산합니다.
데이터: 지정된 디렉토리에 332개의 .csv 파일이 있습니다.
원하는 출력: 파일에 대한 상관 계수가 있는 벡터.
code:
correl <-function(directory= "~/specdata/specdatacsv", threshold= 0) {
filelist <-list.files(path= directory, pattern= ".csv", full.names= TRUE)
nobs <-numeric()
corrvector <-numeric()
for(i in length(filelist)) {
data <-read.csv(filelist[i])
nobs <-sum(complete.cases(data))
if (nobs <= threshold) { next
} else {
nitrate <-as.vector(data$nitrate)
sulfate <-as.vector(data$sulfate)
goodSulfate <-complete.cases(sulfate)
goodNitrate <-complete.cases(nitrate)
icorr <-cor(goodNitrate, goodSulfate)
corrvector <-c(corrvector, icorr)
}
}
corrvector
}
임계값 150에 대한 출력은 다음을 반환해야 합니다.
[1] -0.01895754 -0.14051254 -0.04389737 -0.06815956 -0.12350667 -0.07588814
그러나 대신 빈 corrvector가 반환됩니다. 제가 저지른 실수를 찾도록 도와주세요.
- 답변 # 1
@stefan의 의견에 따르면 문제는 다음과 같습니다.
for(i in length(filelist))
따라서 길이가
파일 목록
는 332이고 다음과 같습니다.for(i in 332)
실제로 원하는
for(i in 1:332)
다음 중 하나를 사용하여 쉽게 달성할 수 있습니다.
for (i in 1:length(filelist)) { print(i) }
또는
for (i in seq_along(filelist)) { print(i) }
for (I in seq_along(filelist))로 시도하십시오. length(filelist)는 파일 수입니다. 따라서 I in length(filelist) your 루프는 파일 목록의 마지막 요소에 대해서만 계산을 실행합니다.
stefan2022-02-15 00:03:13