r语言 - 使用 for 循环使用 read.csv() 读取某些文件,但它只返回"'file' must be a character string or connection"



这是我正在处理的数据。https://d396qusza40orc.cloudfront.net/rprog%2Fdata%2Fspecdata.zip

我正在尝试创建一个名为pollutantmean的函数,该函数将加载选定的文件,聚合(rbind)列,并返回某一列的平均值。除了如何运行循环,我已经想好了所有的事情,这样我就可以把多个文件变成一个大数据帧。

for (id in 1:5) {
  files_full <- Sys.glob("*.csv")
  fileQ <- files_full[[id]]
  empty_tbl <- rbind(empty_tbl, read.csv(fileQ, header = TRUE))
}

这个for循环本身就可以工作,但当我尝试使用我的更大功能时

pollutantmean <- function(directory = "specdata", pollutant, id =              1:332) {
  empty_tbl <- data.frame()
  for (id in 1:332) {
    files_full <- Sys.glob("*.csv")
    fileQ <- files_full[[i]]
    empty_tbl <- rbind(empty_tbl, read.csv(fileQ, header = TRUE))
  }
  goodata <- na.omit(empty_tbl)
  if(pollutant == "sulfate") {
    mean(goodata[,2])
  } else {
    mean(goodata[,3])
  }
}

我得到了:

"读取.table时出错(file=file,header=header,sep=sep,quote=quote,:"file"必须是字符串或连接";。

我完全不知道如何解决这个问题,已经尝试了很多不同的方法。我确信我在文件命名上搞砸了,但我自己尝试了for循环,它运行得很好。。。

考虑在使用函数的目录参数的csv文件上使用lapply()。下面假设规范数据是当前工作目录的子文件夹:

pollutantmean <- function(directory = "specdata", pollutant) {
   files_full <- Sys.glob(paste0(directory,"/*.csv"))[1:332]  # FIRST 332 CSVs IN DIRECTORY
   dfList <- lapply(files_full, read.csv, header=TRUE)
   df <- do.call(rbind, dfList)
   gooddata <- na.omit(df)
   pmean <- ifelse(pollutant == "sulfate", mean(gooddata[,2]), mean(gooddata[,3]))
}

相关内容

  • 没有找到相关文章

最新更新