我在R中运行复杂但相对快速的模拟(每次模拟大约需要5-10分钟),我开始与各种输入值并行运行,以测试我的一些算法的稳健性
似乎存在一个问题:输入的某些排列导致模拟中的致命错误,整个代码崩溃,导致模拟结束。是否有一种简单的方法来捕获错误(可能来自各种位置)并让它忽略这些输入值并继续下一步?
当我设置一组输入以检查是否需要5-6个小时来完成所有模拟时,我感到很沮丧,我回来发现它在前45分钟内崩溃了。
当我努力修复错误/识别输入时,我会发现错误,有关如何忽略/捕获错误的任何想法?
由于
答案 0 :(得分:1)
我不知道你是如何组织你的模拟的,但我猜你有一个循环,你可以在每一步检查使用新的参数。
您可以使用tryCatch
。如果输入错误,我会抛出一个错误。
step.simul <- function (x) {
stopifnot(x%%2 == 1, x>0)
(x - 1)/2
}
然后使用tryCatch,我用代码标记坏输入 告诉你输入错误:
sapply(1:5, function(i)tryCatch(step.simul(i), error=function(e)-1000-i))
[1] 0 -1002 1 -1004 2
如您所见,我的模拟遍历所有循环索引。