我是一个R初学者,正在进行R的自我教程和作业。我有一个CSV文件列表,从001.csv到332.csv。每个CSV有四列:日期,硫酸盐,硝酸盐和ID。我需要写一个函数来计算我们调用的这些文件的污染物的平均值。所以我有我的代码如下,
pollutantmean <- function (directory, pollutant, id = 1:332) {
## read the files
filenames <- sprintf("%03d.csv",id)
filepath <- paste(directory, filenames, sep="/")
## create a data frame to store data
df <- lapply(filepath, read.csv)
## calculate the mean
mean(df[[pollutant]], na.rm = TRUE)
}
字符串
一切都很好,直到最后的平均函数。当我输入"pollutantmean("specdata", "sulfate", 1:10)"
时,
它返回Warning message: In mean.default(df[[pollutant]], na.rm = TRUE) : argument is not numeric or logical: returning NA
我已经尝试类(df),并检查它是一个 Dataframe ,但不知道哪一部分,我错过了造成的df无法识别。我已经研究了几个小时,从不同的网站,但仍然无法得到的关键。希望有人可以帮助。
1条答案
按热度按时间eh57zj3b1#
看起来问题是lapply返回了一个 Dataframe 列表,而你试图直接在列表上计算平均值。在计算平均值之前,你应该首先将这些 Dataframe 合并合并到一个对象中。
下面是你的函数的更新版本:
字符串