Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 无法忽略我的文件列表中的NAs_R_Data Science - Fatal编程技术网

R 无法忽略我的文件列表中的NAs

R 无法忽略我的文件列表中的NAs,r,data-science,R,Data Science,我的目录中有一个文件列表(从1到332)。file1对应于id1,file2对应于id2,依此类推 每个文件包含4列,我必须通过忽略NAs来计算第2列(标记为“污染物”)的总和和长度 我什么都试过了:!is.na(file),na.rm=TRUE,省略…当我希望求和和和长度为1:100或1:60(从值1到另一个值)时,它可以工作,但在70:72时不工作。我不能指出这个问题 下面是我的代码中处理它的部分: pollutantmean <- function(directory,polluta

我的目录中有一个文件列表(从1到332)。file1对应于id1,file2对应于id2,依此类推

每个文件包含4列,我必须通过忽略NAs来计算第2列(标记为“污染物”)的总和和长度

我什么都试过了:!is.na(file),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))

}

pollutantmean您的索引错误。调用
polluantmean(“.”,“sulf”,70:72)
时,函数
polluantmean
length(id)
的值是多少?(答:3)。。。对于循环中
i
的第一个值(id中的i)
它是什么索引?(答:70)
下面是一个示例,说明您正在做什么,以及错误索引会带来什么:

sums <- numeric(3)
sums[10] <- 42
sums
# > sums
# [1]  0  0  0 NA NA NA NA NA NA 42

是否可以共享一个上述操作失败的代码段?@Edwin:我编辑了我的问题,以包含上面的全部代码。@jogo是的,我希望是一个值。当我通过键入:pollutanmean(“.”,“sulf”,1:10)来运行脚本时,我得到了很好的平均值。但是,当我输入:pollutanmean(“.”,“sulf”,70:72)时,我得到的答案是“NA”,没问题。但是为什么要进行初始化
意味着索引错误。调用
polluantmean(“.”,“sulf”,70:72)
时,函数
polluantmean
length(id)
的值是多少。。。对于循环中
i
的第一个值(id中的i)
它是什么索引?非常感谢@jogo!我理解了我的错误,并了解了函数sapply和lapply。
pollutantmean <- function(directory, pollutant, id= 1:332) {
  files <- list.files(directory)
  L <- lapply(files[id], function(f) read.csv(f)[,pollutant])
  sums    <- sapply(L, sum, na.rm=TRUE)
  lengths <- sapply(L, function(l) sum(!is.na(l)))

  list(sums=sums, lengths=lengths, means=sum(sums)/sum(lengths))
}