R:在文件列表上运行for循环时使用单个文件

时间:2018-11-18 15:56:11

标签: r loops for-loop

我正在尝试创建一个循环,在该循环中,我从文件名列表中选择一个文件名,并使用该文件来运行read.capthist,然后运行discretizefit,{ {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新手将不胜感激任何提示!

0 个答案:

没有答案