我想使用并行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)
答案 0 :(得分:3)
试试f.parallel <- function(x) if(x) TRUE
。 ifelse()
将不允许您返回NULL
。
调用cbind()
组合循环结果时,NULL
元素将被删除。如果您想在后处理步骤中过滤掉它们,我建议您使用ifelse(x, TRUE, NA)
。