2

我有一个关于我写的循环的简单问题。我想访问不同目录中的不同文件并从这些文件中提取数据并合并到一个表中。我的问题是我的循环没有添加不同文件的结果,而只是使用当前在循环中的物种进行更新。这是我的代码:

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

这可能是一个简单的问题,但我不是一个经验丰富的程序员。感谢加布里埃尔的关注

4

2 回答 2

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)
}))
于 2012-06-13T18:13:40.413 回答
2

@Aaron 的lapply回答很好,很干净。但是要调试您的代码:您将一堆数据放入但每次都table覆盖。table你需要做

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

顺便说一句,由于table是 R 中的一个函数,我会避免将它用作变量名。想象:

table(table)

:-)

于 2012-06-14T12:11:25.557 回答