Описанное поведение может быть достигнуто путем определения функции .combine
, которая игнорирует значения NA.
cbind_ignoreNA <- function(...){
ll <- list(...)
ll <- ll[unlist(lapply(ll, function(x) !(length(x)==1 && is.na(x))))]
do.call("cbind", ll)
}
Тогда можно вернуть NA
(длины один), если результат итерации не должен появиться в выходных данных foreach()
.В следующем примере результат итерации i=2
игнорируется:
library(foreach)
library(doParallel); registerDoParallel(2)
test <- foreach(i=1:4, .combine=cbind_ignoreNA) %dopar% {
if(i==2)
r <- NA
else
r <- i:(i+3)
r
}
test
[,1] [,2] [,3]
[1,] 1 3 4
[2,] 2 4 5
[3,] 3 5 6
[4,] 4 6 7