>source

목표: 완전한 케이스(임계값 인수)에 대한 사용자 정의 기준을 충족하는 여러 파일에 대한 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가 반환됩니다. 제가 저지른 실수를 찾도록 도와주세요.

for (I in seq_along(filelist))로 시도하십시오. length(filelist)는 파일 수입니다. 따라서 I in length(filelist) your 루프는 파일 목록의 마지막 요소에 대해서만 계산을 실행합니다.

stefan2022-02-15 00:03:13
  • 답변 # 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)
    }
    

  • 이전 Numpy를 사용한 시그마 표기법
  • 다음 node.js : Next.js API 경로에서 진행 이벤트를 가져오는 방법