我一直在尝试编写一个函数,它接受数据文件目录和完整案例的阈值,并计算监测位置的硫酸盐和硝酸盐之间的相关性,其中完全观察到的病例数(在所有变量上)更大超过门槛。该函数应返回满足阈值要求的监视器的相关向量。如果没有监视器满足阈值要求,那么该函数应该返回一个长度为0的数字向量。生成了多个错误,因此我在这里没有提到它们。
代码的数据文件在这里: https://d396qusza40orc.cloudfront.net/rprog%2Fdata%2Fspecdata.zip
代码
corr<-function(directory, threshold=0){
files.list=list.files(directory, full.names=TRUE, pattern=".csv")
comp.sum<-numeric()
num<-numeric()
for(i in 1:332){
data<-read.csv(files.list[i])
data.cor<-na.omit(data[,2:3])
comp.sum<-sum(data.cor)
if
{
comp.sum>threshold
cor.var<-cor(data.cor, use="all.obs")
}
else
{
num
}
}
cor.var
}
答案 0 :(得分:1)
我稍微修改了一下这个函数来得到你想要的东西。这当然假设硫酸盐和硝酸盐总是在第2列和第3列中,并且该目录中没有其他csv(就好像这些列中有数字一样,相关系数会计算其他内容)。
corr<-function(directory, threshold=0){
files.list=list.files(directory, full.names=TRUE, pattern=".csv")
cors <- rep(0, length(files.list))
for(i in 1:length(files.list)){
data<-read.csv(files.list[i], header = TRUE)
data.cor<-na.omit(data[,2:3])
nobs<-nrow(data.cor)
if(nobs > threshold){
cors[i]<-cor(data.cor[,1], data.cor[,2])
}else{
cors[i] <- 0
}
}
return(cors)
}