2016-10-21 120 views
0

我一直在努力编写一个函数,该函数需要一个数据文件的目录和一个完整的案例的阈值,并计算硫酸盐和硝酸盐之间的相关性,以监测完全观察到的病例数量对所有变量)大于阈值。该函数应返回满足阈值要求的监视器的相关向量。如果没有监视器满足阈值要求,则该函数应该返回一个长度为0的数字向量。产生了多个错误,因此我在这里没有提及它们。R函数产生错误

的代码数据文件的位置: 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 
} 
+1

至少缺少''if''的条件。我认为它意外地在括号内。 – Phann

回答

1

我修改的功能有点让你想什么。这当然假定硫酸盐和硝酸盐总是在第2栏和第3栏中,并且该目录中没有其他的csvs(就好像这些栏中有数字,其他的其他数据也会计算出相关系数)。

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) 
} 
+0

感谢您的代码,但是您能否在我的代码中提到错误? –

+0

如果你把你的功能放在我的旁边,那很明显错误在哪里。例如,你不是用你的向量填充向量中的元素,而是每次重写'cor.var','cor.var'的行在if语句中,当它应该在后面时,等等。 –