我正在R中运行一个复杂但相对较快的模拟(每次模拟大约需要5-10分钟),并且我开始并行运行它和各种输入值,以便测试我的一些算法的健壮性。
似乎有一个问题:输入的某些排列导致模拟中的致命错误,整个代码崩溃,导致模拟结束。有没有一种简单的方法来捕获错误(可能来自不同的位置),并让它忽略这些输入值并转到下一个位置?
令人沮丧的是,当我设置了一个输入数组来检查,它应该花5-6个小时来运行所有的模拟,但我回来后发现它在前45分钟就崩溃了。
虽然我正在尝试修复bug /识别将我推到该错误的输入,但对于如何在错误出现时忽略/捕获错误,有什么想法吗?
谢谢
发布于 2013-07-24 23:16:44
我不知道你是如何组织你的模拟的,但我猜你有一个循环,你在每一步都检查使用新的参数。
您可以使用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
如你所见,我的模拟遍历了所有的循环索引。
https://stackoverflow.com/questions/17837929
复制相似问题