这是我正在处理的数据。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]))
}