几年的努力,我参与的那一刻,我通过一系列的功能,运行与众多的参数组合的大型数据集。 该函数具有一个包装(这样我就可以mclapply
),用于在群集上易于操作。 但是,我遇到两大挑战。
一)我的参数组合大(认为20K到100K)。 有时,特定的组合将失败(如生存过高和死亡率太低,因此模型从来没有收敛的假设的情况)。 这是我很难苏斯提前出局到底哪个组合会失败(生活会更容易些,如果我能做到这一点)。 但现在我有这种类型的设置:
failsafe <- failwith(NULL, my_wrapper_function)
# This is what I run
# Note that input_variables contains a list of variables in each list item
results <- mclapply(input_variables, failsafe, mc.cores = 72)
# On my local dual core mac, I can't do this so the equivalent would be:
results <- llply(input_variables, failsafe, .progress = 'text')
对我的包装功能的骨架看起来是这样的:
my_wrapper_function <- function(tlist) {
run <- tryCatch(my_model(tlist$a, tlist$b, tlist$sA, tlist$Fec, m = NULL) , error=function(e) NULL)
...
return(run)
}
这是最有效的方法? 如果由于某种原因的变量的特定组合崩溃的模型,我需要它返回NULL
,并与其余矣。 不过,我仍然有问题,这种失败小于正常。
B)有时投入一定的组合不会崩溃的模式,但时间太长收敛。 我把我的群集(比如6小时)上的计算时间的限制,所以我不浪费东西被卡住我的资源。 我怎样才能包括超时这样,如果一个函数调用花费的时间比X多的时间在一个单一的列表项,它应该继续前进? 计算所花费的时间是微不足道的,但功能模拟中期不能中断,检查时间,对不对?
任何想法,解决方案或技巧的赞赏!