1

我想使用并行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)
4

1 回答 1

4

试试f.parallel <- function(x) if(x) TRUEifelse()不会让你回来NULL

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

于 2017-02-07T09:44:41.317 回答