【发布时间】:2018-04-04 05:25:39
【问题描述】:
我正在运行一个代码,捕获错误并将其保存以备后用对我来说非常重要,但不要将其包含在我的 foreach 最终结果中。我使用过 trycatch,甚至尝试使用 stop 强制出错。这是我的代码的 sn-p:
##options namely stop , remove or pass
error_handle <- "remove"
cores <- round(detectCores()*percent)
cl<-makeCluster(cores)
registerDoParallel(cl)
predict_load_all <- foreach(i=1:length(id),.export=func,.packages
(.packages()),.errorhandling = error_handle) %dopar% {
possibleError <- tryCatch({
weather_cast <- data.frame(udata$date,j,coeff_i,predict(hour_fits[[j]],
newdata=udata))
},error=function(e)return(paste0("The hour '",j, "'",
" caused the error: '", e, "'")))
if(!exists("weather_cast")){
#possibleError <- data.frame('coeff_item' = coeff_i,'Error' =
possibleError)
possibleError <- data.frame('Error' = possibleError)
write_csv(possibleError,file.path(path_predict,
'Error_weather_cast.csv'),append = T)
stop('error')
}
colnames(weather_cast)<- c("Date","Hour","coeff_item","Predicted_Load")
ifelse(j==1,predict_load <-weather_cast,predict_load <-
rbind(predict_load,weather_cast))
predict_load <- spread(predict_load, Hour, Predicted_Load)
predict_load
}
我正在运行 foreach 以输出 predict_load_all。 possibleError 是需要保存的错误,由trycatch 绑定。这应该保存对象(满足存在条件),然后使用 stop,引发一个错误,该错误被 remove(.errohandling object) 和 foreach 中的循环忽略被跳过。这样,我得到了错误和没有错误的列表。 这似乎没有保存错误文件。 有什么想法吗?
【问题讨论】:
-
你不能/不应该用并行循环做一些串行的事情(比如附加到一个文件)。写入单独的文件。无论如何,请提供一个最小的可重现示例。
-
是的,我明白,但我试图通过执行上述操作来捕捉错误。您是否知道为什么我的上述方法不起作用和/或上述方法的解决方案?
标签: r multithreading try-catch parallel.foreach