我正在尝试创建一个循环,在该循环中,我从文件名列表中选择一个文件名,并使用该文件来运行read.capthist
,然后运行discretize
,fit
,{ {1}},并使用derived
保存输出。该列表包含10个具有相同行和列的文件,它们之间的唯一区别是每行中的地理坐标。
我遇到的问题是save
必须是单个文件(在capt
包中是'captfile'类型),但是我不知道如何选择单个文件文件从此列表中获取,并使我的循环将其识别为单个实体。
这是我尝试仅选择一个文件时遇到的错误:
secr
我不是经过培训的程序员,我是自己学习R的,并且经常使用堆栈溢出来解决问题,但是我无法弄清楚这一点。这是到目前为止我提出的代码:
Error in read.capthist(female[[i]], simtraps, fmt = "XY", detector = "polygon") :
requires single 'captfile'
library(secr)
setwd("./")
files = list.files(pattern = "female*")
lst <- vector("list", length(files))
names(lst) <- files
for (i in 1:length(lst)) {
capt <- lst[i]
femsimCH <- read.capthist(capt, simtraps, fmt = 'XY', detector = "polygon")
femsimdiscCH <- discretize(femsimCH, spacing = 2500, outputdetector = 'proximity')
fit <- secr.fit(femsimdiscCH, buffer = 15000, detectfn = 'HEX', method = 'BFGS', trace = FALSE, CL = TRUE)
save(fit, file="C:/temp/fit.Rdata")
D.fit <- derived(fit)
save(D.fit, file="C:/temp/D.fit.Rdata")
}
是坐标列表。
理想情况下,我还希望我的输出也具有唯一的标识符,因为我正在模拟数据并且必须比较所有结果,所以我不希望每次迭代都覆盖以前的数据输出。
我知道我可以通过引入每个文件并分别运行来使用此代码(此代码适用于几个数据集的非模拟运行),但是由于我希望运行100个模拟,因此这很费力并容易出错。
R新手将不胜感激任何提示!