我有一个关于我写的循环的简单问题。我想访问不同目录中的不同文件,并从这些文件中提取数据并合并到一个表中。我的问题是我的循环不是添加不同文件的结果,而是仅使用当前循环中的物种进行更新。这是我的代码:
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)
}
这可能是一个简单的问题,但我不是一位经验丰富的程序员。感谢您的关注 加布里埃尔
答案 0 :(得分:2)
我使用lapply
从每个文件中获取所需数据并添加Species信息,然后与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)
}))
答案 1 :(得分:2)
@Aaron的lapply
答案很好,很干净。但要调试代码:您将大量数据放入table
,但每次都覆盖table
。你需要做
table <-cbind(table, species,AUC,AUC_SD,Variable,Resolution)
BTW,因为table
是R中的函数,所以我避免将它用作变量名。想象一下:
table(table)
: - )