我的目录中有一个文件列表(从1到332) . file1对应于id1,file2对应于id2,依此类推 .
每个文件包含4列,我必须通过忽略NA来计算第2列的总和和长度(标记为“污染物”) .
我已经尝试了一切:!is.na(文件),na.rm = TRUE,省略...当我想要1:100或1:60(从值1到另一个值)的总和和长度时它起作用,但是从70:72开始它不起作用 . 我无法指出问题所在 .
以下是我的代码中处理它的部分:
pollutantmean <- function(directory,pollutant,id= 1:332){
files <- list.files(directory)
sums <- numeric (length(id))
lengths <- numeric (length(id))
means <- numeric (length(id))
for (i in id){
file <- read.csv(files[i])[,pollutant]
sums[i] <- sum(file,na.rm = TRUE)
lengths[i] <-length(file[!is.na(file)])
}
means <-(sum(sums)/sum(lengths))
return(list(sums, lengths, means))
}
在此先感谢您的帮助!
1 回答
你的索引是错误的 . 当你调用
pollutantmean(".","sulf",70:72)
时,函数pollutantmean
中length(id)
的值是多少? (回答:3)......并且循环i
的第一个值i
是什么索引? (答案:70)以下是您正在执行的操作以及使用错误索引获得的内容的示例:
......进一步的计算给出了
NA
所以,问题的根源与你的other question相同
这是您的功能的清晰版本: