2012-06-13 48 views
2

我有一個關於我寫的循環的簡單問題。我想訪問不同目錄中的不同文件,並從這些文件中提取數據併合併到一個表中。我的問題是我的循環沒有添加不同文件的結果,而只是使用當前循環中的物種進行更新。這是我的代碼:合併循環表使用R

for(i in 1:length(splist.par)) 
{ 

    results<-read.csv(paste(getwd(),"/ResultsR10arcabiotic/",splist.par[i],"/","maxentResults.csv",sep=""),h=T) 

    species <- splist.par[i] 
    AUC <- results$Test.AUC[1:10] 
    AUC_SD <- results$AUC.Standard.Deviation[1:10] 
    Variable <- "a" 
    Resolution <- "10arc" 
    table <-cbind(species,AUC,AUC_SD,Variable,Resolution) 
} 

這可能是一個簡單的問題,但我不是一個有經驗的程序員。感謝您的關注 Gabriel

+2

你也許可以做一些更多的標籤,並有一些格式 - 是什麼語言呢? – plasma147

回答

2

我會使用lapply從每個文件中獲取所需的數據並添加物種信息,然後與rbind結合使用。這樣的事情(未經測試):

do.call(rbind, lapply(splist.par, function(x) { 
    d <- read.csv(file.path("ResultsR10arcabiotic", x, "maxentResults.csv")) 
    d <- d[1:10, c("Test.AIC", "AIC.Standard.Deviation")] 
    names(d) <- c("AUC", "AUC_SD") 
    cbind(Species=x, d, stringsAsFactors=FALSE) 
})) 
+0

這很好用!非常感謝你。 –

+0

如果這有幫助,請點擊向上箭頭進行投票。如果它解決了您的問題,請點擊複選標記,讓其他人知道這個工作。 (你可以同時做。)歡迎來到StackOverflow! – Aaron

2

@亞倫的lapply答案很好,乾淨。但是爲了調試你的代碼:你把一堆數據放入table,但是每次都要覆蓋table。你需要做的

table <-cbind(table, species,AUC,AUC_SD,Variable,Resolution) 

順便說一句,因爲table是R中的功能,我會避免使用它作爲一個變量名。試想一下:

table(table) 

:-)

+0

很好的說明,謝謝。但是,我認爲,'rbind(表,cbind(物種,AUC,AUC_SD,變量,分辨率))''。 – Aaron

+0

謝謝你的評論,這是非常有益的! –