我正在尝试编写一个函数,它将返回多个.csv文件中列的平均值。但是,该函数似乎使用了我的平均值计算,因为它返回NA
值:
pollutantmean <- function(directory, pollutant, id = 1:332){
dy <- list.files("specdata", full.names = T)
df <- data.frame()
for(i in id){
rbind(df,read.csv(dy[i]))
}
if(pollutant == "nitrate"){mean(df$nitrate, na.rm = TRUE)}
if(pollutant == "sulfate"){mean(df$sulfate, na.rm = TRUE)}
}
非常感谢您对解决此问题的建议。
发布于 2015-04-20 13:48:53
尝试显式返回自定义函数的平均值,如下所示:
pollutantmean <- function(directory, pollutant, id = 1:332) {
dy <- list.files("specdata", full.names=TRUE)
df <- data.frame()
for (i in id) {
df <- rbind(df, read.csv(dy[i]))
}
if(pollutant == "nitrate") { return(mean(df$nitrate, na.rm=TRUE)) }
if(pollutant == "sulfate") { return(mean(df$sulfate, na.rm=TRUE)) }
}
如果这不能解决问题,那么您可能有包含字符数据的数据框列,从而导致R
为您提供NA
值。在pollutantmean
函数中插入以下两行,以查看您是否在处理数值列:
print(class(df$nitrate))
print(class(df$sulfate))
如果你看到"factor",或者任何不是数字的东西,那么你就会知道你的输入数据包含的不是纯数字。
https://stackoverflow.com/questions/29740046
复制相似问题