我正在运行这个R代码来导入大量的csv文件,并为所有数据集计算一个数值向量的平均值(硝酸盐),过滤一些整数向量ID的值。
setwd("C:/Users/americo/Documents/Documenti_2_0/Education/Data science/Coursera/R programming/rworkingdir/specdata")
lista_tot1 = list.files(pattern="*.csv");
lista_tot2 = lapply(lista_tot1, read.csv, sep = ",")#stampa tutti i csv
lista_tot3<-do.call("rbind", lista_tot2)
lista_tot<-lista_tot3[is.element(lista_tot3$ID, 3:4),]
media<-mean(lista_tot$nitrate, na.rm=TRUE)
media
它有效。
但是,如果我尝试编写这个函数,这似乎与我类似:
pollutantmean <- function(directory, pollutant, id = 1:332) {
setwd(directory)
lista_tot1 = list.files(pattern="*.csv");
lista_tot2 = lapply(lista_tot1, read.csv, sep = ",")
lista_tot3<-do.call("rbind", lista_tot2)
lista_tot<-lista_tot3[is.element(lista_tot3$ID, id),]
media<-mean(lista_tot$pollutant), na.rm=TRUE)
return(media)
}
然后
media1<-pollutantmean("C:/Users/americo/Documents/Documenti_2_0/Education/Data science/Coursera/R programming/rworkingdir/specdata","nitrate", 3:4)
然后它返回给我的消息:
warning message in mean.default argument is not numeric or logical returning na
...但我的矢量是数字
对我来说真的没有意义。 如果我要求返回最后一个数据集lista_tot的结构,硝酸盐仍然是数字。
我真的不知道该怎么做,如果一些非常有经验的用户可以帮助我,我会非常感激。
答案 0 :(得分:10)
改变这个:
media<-mean(lista_tot$pollutant), na.rm=TRUE)
到此:
media<-mean(lista_tot[[pollutant]], na.rm=TRUE)
因为“$”不评估它的论点。在这种情况下,“污染物”不是列名,因此您需要一个提取函数来评估命名对象pollutant
是“携带”(即列名称“硝酸盐”)以获得正确的提取来自数据框。