2016-10-21 119 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語句中,當它應該在後面時,等等。 –