我有一个复杂的长功能,我正在用它做模拟。它可能会产生错误,主要是与随机向量结束时具有零差异的相等值,导致进入PCA或逻辑回归。
我正在使用doMC
和plyr
在群集上执行它。我不想tryCatch
函数内部的每一个小东西,因为错误的可能性很多,而且每个函数的概率都很小。
我如何尝试捕获每次运行,而不是tryCatch
每一个小行?代码是这样的:
iteration = function(){
a really long simulation function where errors can happen
}
reps = 10000
results = llply(1:reps, function(idx){out<-iteration()},.parallel=TRUE)
大约一年后编辑:
与foreach
plyr
包使这一切变得更加容易
library(foreach)
output <- foreach(i=1:reps, .errorhandling = 'remove')%dopar%{
function
}
答案 0 :(得分:2)
你可以在你传递给llply的函数中包装try catch循环吗?
results = llply(1:reps, function(idx){
out = NA
try({
out<-iteration()
}, silent=T)
out
},.parallel=TRUE)
答案 1 :(得分:0)
您可以将tryCatch
放在函数迭代中,例如:
iteration <- function(idx){
tryCatch(
{ idx <- idx+1
## very long treatments here...
## I add a dummy error here to test my tryCatch
if(idx %% 2000 ==0) stop("too many iterations")
},error = function(e) print(paste('error',idx)))
}
现在在llply
内进行测试,
library(plyr)
reps = 10000
results = llply(1:reps, iteration,.parallel=TRUE)
1] "error 2000"
[1] "error 4000"
[1] "error 6000"
[1] "error 8000"
[1] "error 10000"