R数据选择使用sapply不工作 [英] R data selection using sapply not working
问题描述
我有以下代码来获取污染物的含义。程序的数据在名称为001.csv,002.csv,...到332.csv的文件夹指定数据中。任何一个数据的名称都给出以下名称:
[1]DatesulfatenitrateID
在下面的代码中,我必须计算污染物硝酸盐或硫酸盐的平均值。我认为代码是正确的。但资料$ pollutant正在提供
NULL
污染物错误,sulfate,23):尝试
应用非函数
方式:
污染物(specdata,硝酸盐,23)
/ pre>
我在这里做错了什么?
污染物< - function(directory,pollutant,id = 1:332){
f< - function(num){
if(num> = 0& num = 9){
fname < - paste('specdata / 00',as.character(num),。csv,sep =)
}
else if(num> = 10& num& = 99){
fname < - paste('specdata / 0',as.character(num),。csv,sep =)
}
else {
fname< - paste('specdata /',as.character(num),。csv,sep =)
}
data< - read.csv(fname)
data< - data [complete.cases(data),]
return(mean(data $ pollutant))
}
results< - sapply(id,f)
return(results)
}
解决方案你最可能的错误是调用
data $ pollutant
引起的。你有pollutant =nitrate
,这是一个字符串,在这种情况下,引用$
工作。使用[]
代替,这里是一个最小的例子:df< - data.frame(hello = 1:3,world = 5)
name< - hello
df $ name
NULL
df [name]
#hello
#1 1
#2 2
#3 3
I have following code for getting the pollutant mean. The data for the program are in folder specdata with names "001.csv", "002.csv", ... to "332.csv" . The names of any one data gives following names:
[1] "Date" "sulfate" "nitrate" "ID"
In the code below, I have to calculate the mean of pollutant nitrate or sulfate . I think the code is correct. But data$pollutant is giving
NULL
Error in pollutantmean("specdata", "sulfate", 23) : attempt to apply non-function
The code is supposed to call in following way:
pollutantmean("specdata", "nitrate", 23)
What am I doing wrong here??
pollutantmean <- function(directory, pollutant, id = 1:332) { f <- function(num){ if(num>=0 & num<=9){ fname <- paste('specdata/00',as.character(num),".csv",sep="") } else if (num>=10 & num <=99){ fname <- paste('specdata/0',as.character(num),".csv",sep="") } else{ fname <- paste('specdata/',as.character(num),".csv",sep="") } data <- read.csv(fname) data <- data[complete.cases(data),] return(mean(data$pollutant)) } results <- sapply(id, f) return(results) }
解决方案The error you have is most probably caused by calling
data$pollutant
. You havepollutant="nitrate"
, which is a character string, in that case reference by$
is not going to work. Use[]
instead, here's a minimal example:df <- data.frame(hello=1:3, world=5) name <- "hello" df$name NULL df[name] # hello #1 1 #2 2 #3 3
这篇关于R数据选择使用sapply不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文