我试图在R中编写我的第一个for循环。循环应该读取物种列表,确定每个物种的AUC和Kappa值,然后写入.csv文件的数据。
现在我已经省略了代码的Kappa部分以简化。代码运行正常,但我到csv文件的输出是我列表中的最后一个物种,相应的AUC重复了15次。
相反,如果我运行print(i)和print(AUC),我会得到每个物种的列表和相应的AUC。我不明白为什么print
和write.csv
没有给我相同的结果。
setwd("Y:/HModel/Maxent/MaxentOutputs/allspp 11-28")
splist <-c( "pomatomus_saltatrix",
"stenotomus_chrysops",
"illex_illecebrosus",
"lophius_americanus",
"squalus_acanthias",
"scophthalmus_aquosus",
"paralichthys_dentatus",
"helicolenus_dactylopterus",
"merluccius_albidus",
"merluccius_bilinearis",
"urophycis_chuss",
"cynoscion_regalis",
"pollachius_virens",
"urophycis_tenuis",
"tautogolabrus_adspersus")
n = rep(NA, length(splist))
AUCandKAPPA = data.frame(sppocean=n, AUC=n, stringsAsFactors=FALSE)
for (i in splist) {
presence_csv <- paste(i,"0", "samplePredictions.csv", sep = "_")
background_csv <- paste(i, "0", "backgroundPredictions.csv", sep = "_")
presence <- read.csv(presence_csv)
background <- read.csv(background_csv)
pp <- presence$Logistic.prediction # get the column of predictions
testpp <- pp[presence$Test.or.train=="test"] # select only test points
trainpp <- pp[presence$Test.or.train=="train"] # select only test points
bb <- background$Logistic
combined <- c(testpp, bb) # combine into a single vector
label <- c(rep(1,length(testpp)),rep(0,length(bb))) # labels: 1=present, 0=random
pred <- prediction(combined, label) # labeled predictions
perf <- performance(pred, "tpr", "fpr") # True / false positives, for ROC curve
AUC <-performance(pred, "auc")@y.values[[1]] # Calculate the AUC
# fill in diagnostics
AUCandKAPPA$sppocean = i
AUCandKAPPA$AUC = AUC
print(i)
print(AUC)
# write AUC and kappa to excel file
write.csv(AUCandKAPPA, file="kappa_sp1-28.csv")
}
我尝试更改以下行,但收到错误
# fill in diagnostics
AUCandKAPPA$sppocean[i] = i
AUCandKAPPA$AUC[i] = AUC
Error in `$<-.data.frame`(`*tmp*`, "sppocean", value = c("15", "pomatomus_saltatrix" :
replacement has 2 rows, data has 1
答案 0 :(得分:1)
您尝试的改变是朝着正确方向迈出的一步。您已经注意到您的循环在每次迭代时都会覆盖结果。但由于您通过splist
中的字符串控制循环,因此无法使用AUCandKappa
对数据框i
建立索引。也许用数字索引控制你的循环:
for(i in 1:length(splist)) {}
调整依赖splist
分配给i
的字符的所有代码,以便通过splist
从splist[i]
中提取。
然后将结果分配给您的表格:
# fill in diagnostics
AUCandKAPPA[i, "sppocean"] <- splist[i]
AUCandKAPPA[i, "AUC"] <- AUC