下面是代码。似乎我没有设法定义向量' nobs'' cor'正确并且if语句试图评估NA值。 有人能指出我的错误吗? 谢谢, 塔米尔
corr<-function(directory, threshold=0){
allfiles<-list.files("specdata", full.names = TRUE)
NumOfFiles<-length(allfiles)
n<-1
id<-vector()
nobs<-vector()
cor<-vector()
for (i in NumOfFiles){
data<-read.csv(allfiles[i])
cleandata<-data[complete.cases(data),]
id[n]=i
nobs[n]<-sum(complete.cases(data)) #Number of completre cases
n<-n+1
if (nobs[n]>threshold){
cor[n]<-cor(cleandata[sulfate],cleandata[nitrate])
}
}
return(cor)
}
答案 0 :(得分:1)
代码还远远不够。我改变了n <- n+1
的位置。在您的示例中,它在函数中过早递增。当函数下降到if(nobs[n]>threshold)
时,它会在你执行n + 1之后进行检查,因此始终为NA
。
其次,我在污染物名称周围加上引号。
corr<-function(directory, threshold=0){
allfiles<-list.files("specdata", full.names = TRUE, pattern="csv")
NumOfFiles<-length(allfiles)
n<-1
id<-vector()
nobs<-vector()
cor<-vector()
for (i in 1:NumOfFiles){
data<-read.csv(allfiles[i])
cleandata<-data[complete.cases(data),]
id[n]=i
nobs[n]<- sum(complete.cases(data)) #Number of completre cases
if (nobs[n]>threshold){
cor[n]<-cor(cleandata[,"sulfate"],cleandata[,"nitrate"])
n<-n+1
}
}
return(cor)
}
我们可以测试:
summary(corr("specdata"))
Min. 1st Qu. Median Mean 3rd Qu. Max.
-1.00000 -0.05205 0.10840 0.13800 0.27890 1.00000
cr <- corr("specdata", 150)
head(cr)
[1] -0.01895754 -0.14051254 -0.04389737 -0.06815956
[5] -0.12350667 -0.07588814
两者都匹配所需的输出。