在 R 中,嵌套循环在读取多个文件时不会 return 预期结果

In R, nested loops don't return the expected result while reading through multiple files

Objective:计算多个文件的2个变量之间的相关系数,满足完整案例的自定义标准(阈值参数)。

数据:指定目录下的332个.csv文件。

所需输出:包含文件相关系数的向量。

代码:

 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 的输出应该 return:

[1] -0.01895754 -0.14051254 -0.04389737 -0.06815956 -0.12350667 -0.07588814

但是空的校正向量得到 returned。请帮我找出我犯的错误。

根据@stefan 的评论,问题出在这里:

for(i in length(filelist)) 

所以,如果 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)
}