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

How to return null for custom function used in %dopar%?

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

但是,我的程序returns

task 1 failed - "replacement has length zero"

问题可以通过以下代码重现:

 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)

尝试f.parallel <- function(x) if(x) TRUEifelse() 不允许您 return NULL.

当调用 cbind() 来组合循环的结果时,NULL 元素将被删除。如果您想在 post-process 步中过滤掉它们,我建议您使用 ifelse(x, TRUE, NA).