R -TryCatch()在并行ddply中使用时不起作用



以下代码的以下块仅在ddply不平衡时起作用;即ddply(..., .parallel = FALSE).parallel=TRUE时为什么不起作用?我有一个需要并行化的计算,并且ddply非常适合它,但是我似乎无法弄清楚如何并行化一个使用ddply的 tryCatch()语句的函数。好像ddply忽略了代码在tryCatch()之内的事实。

# tryCatch in ddply
library(plyr)
library(dplyr)
library(reshape2)
library(parallel)
library(doParallel)
theFunc <- function(df){
  m <- df$a
  m <- tryCatch(
    {if(m>1){
      # do something normal
      m+1
    }else{
      # do something that throws an error
      m+"mehwhatever"
    }
    },
    warning=function(war){
      message(war)
      m <- df$a
      return(m)
    },
    error=function(cond) {
      message(cond)
      m <- df$a
      return(m)
    },
    finally={
      print("Does this even work?")
      print(m)
      }
  )
  df$a <- m
  return(df)
}
df <- data.frame(a=1:10)
print(df)
nodes <- detectCores(logical = FALSE)
cl <- makeCluster(nodes)
registerDoParallel(cl)
df <- ddply(.data = df,.variables = c("a"),.fun = function(x){return(theFunc(x))},.parallel = TRUE,.paropts = list(.export=c(as.vector(lsf.str()))))
parallel::stopCluster(cl)
print(df)

所有消息()调用都需要删除。

最新更新