如何为%dopar%中使用的自定义函数返回null?

时间:2017-02-07 09:32:18

标签: r parallel-foreach

我想使用并行foreach循环中使用的自定义函数返回NULL。用法是,如果某些结果不符合某些条件,则该结果将不会被存储,并且它将作为后处理步骤过滤掉。

但是,我的程序返回

  

任务1失败 - “替换长度为零”

可以使用以下代码重现该问题:

 library(doParallel)
 Input <- c(F,T,F)
 f.parallel <- function(x){
   ifelse(x,T,NULL)
 }
 no_cores <- detectCores()-1
   # for mac OS, linux
 c1 <- makeCluster(no_cores,type = "FORK")
   # for windows
   #   cl <- makeCluster(no_cores)
   #   clusterExport(cl, list("Input","f.parallel"))
 registerDoParallel(cl)
 output <- foreach(i=1:length(Input),.combine = cbind) %dopar% f.parallel(Input[i])

 stopCluster(c1)

1 个答案:

答案 0 :(得分:3)

试试f.parallel <- function(x) if(x) TRUEifelse()将不允许您返回NULL

调用cbind()组合循环结果时,NULL元素将被删除。如果您想在后处理步骤中过滤掉它们,我建议您使用ifelse(x, TRUE, NA)