Я пытаюсь создать цикл, в котором я выбираю одно имя файла из списка имен файлов и использую этот файл для запуска read.capthist
, а затем discretize
, fit
, derived
и сохраняю выходы с использованием save
. Список содержит 10 файлов одинаковых строк и столбцов, единственное различие между ними - географические координаты в каждой строке.
Проблема, с которой я сталкиваюсь, заключается в том, что capt
должен быть одним файлом (в пакете secr
это типы 'captfile'), но я не знаю, как выбрать один файл из этого списка и заставить мой цикл распознавать его как единый объект.
Это ошибка, которую я получаю, когда пытаюсь выбрать только один файл:
Error in read.capthist(female[[i]], simtraps, fmt = "XY", detector = "polygon") :
requires single 'captfile'
Я не программист по образованию, я изучил R самостоятельно и много использовал переполнение стека для решения своих проблем, но я не смог понять это. Вот код, который я придумал до сих пор:
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")
}
simtraps
- список координат.
В идеале я хотел бы, чтобы у моих выходных данных были также уникальные идентификаторы, поскольку я имитирую данные и мне придется сравнивать все результаты, я не хочу, чтобы каждая итерация перезаписывала предыдущий вывод данных.
Я знаю, что могу использовать этот код, введя каждый файл и запустив его отдельно (этот код работает для прогонов, не имитирующих несколько наборов данных), но, поскольку я надеюсь запустить 100 симуляций, это будет трудоемким и склонны к ошибкам.
Любые советы будут с благодарностью приняты новичком!