我在 Linux 机器(服务器)上的 R 2.15.3 中执行子采样任务,其中在某些子采样迭代中出现错误(这只是由于不合适的子采样数据集)。
为了能够在没有循环停止的情况下运行许多子采样迭代,在每次迭代中我使用try()
以下方式:
set.seed(1234)
interestingobject <- list()
for(i in 1:300) {
anyproblems <- try(0 + "0")
while(class(anyproblems) == "try-error") {
anyproblems <- try({
<code line 1>
<code line 2>
<code line 3>
.
.
.
})
}
interestingobject[[i]] <- <object from iteration i>
}
现在我有以下“奇怪”的问题:
经过几次迭代后,第一个错误发生在
try({ ... })
. 我认为这没有问题,因为“while”循环应该继续,直到不再try({ ... })
发生错误。但问题是,在第一个错误发生后,同样的错误一次又一次地发生,因为抽取了相同的样本,我不知道为什么。
更新:在“代码行 1”行之前,我只是在代码中绘制一个随机cat(runif(1), "\n")
数try({ ... })
(我真的不知道这是怎么回事。我想这个问题可以通过与 R 生成/处理随机数(或类似的东西)的方式相关的东西来解释。
如果没有确切的代码,这似乎有点困难,但后者可能不会有太大帮助,因为它相当长且令人困惑。
如何解释发生这样的事情?
抽取的随机数也在循环中重复,所以实际上每两次迭代都会重复同样的事情。
编辑(可能对这个问题不重要):代码上的一些规范:在每次迭代中都会完成一个交叉验证,其中还有一个嵌套交叉验证,其中 - 使用交叉验证 - 在每个外部交叉中优化一个调整参数验证迭代。
也许值得知道的是,调整参数的调整——以及因此在相应的交叉验证中随机拆分成折叠——是由在代码之外定义的自写函数完成的。
更新 2:感谢评论者,我现在使用调试并发现当场发生第一个错误(仅来自一个类的观察)并且循环开始的地方也收到警告:
在 get(.obj, envir = dump[[.selection]]) 中:重新启动中断的 Promise 评估
也许这有帮助。这个警告信息是什么意思?可能是随机数生成器的种子重置了吗?