Проблема в том, что вы неправильно используете оператор %:%
.Он предназначен для объединения двух foreach
объектов, в результате чего получается один foreach
объект, который можно использовать для многократной оценки любого выражения, которое вы ему предоставляете.Итак, если вы хотите использовать %:%
, вам нужно сначала объединить два оператора foreach()
, а затем использовать полученный объект для передачи одного вызова %do%
(или в вашем случае %dopar%
).См. (1) ниже для примера.
В качестве альтернативы, если вы хотите вложить два объекта foreach()
, используйте %do%
дважды, как в (2) ниже.
В любом случае работает, хотядля параллельных заданий я бы предпочел тот, который использует %:%
.Ваш код, как и (3) ниже, объединяет элементы двух стратегий для создания гибрида, который ничего не может сделать.
X <- c("A", "B")
Y <- 1:3
## (1) EITHER merge two 'foreach' objects using '%:%' ...
foreach (j = X, .combine = c) %:% foreach(i = Y, .combine = c) %do% {
paste(j, i, sep = "")
}
# [1] "A1" "A2" "A3" "B1" "B2" "B3"
## (2) ... OR Nest two 'foreach' objects using a pair of '%do%' operators ...
foreach(j = X, .combine = c) %do% {
foreach(i = Y, .combine = c) %do% {
paste(j, i, sep = "")
}
}
# [1] "A1" "A2" "A3" "B1" "B2" "B3"
## (3) ... BUT DON'T use a hybrid of the approaches.
foreach(j = X, .combine = c) %:% {
foreach(i = Y, .combine = c) %do% {
paste(j, i, sep = "")
}
}
# Error in foreach(j = X, .combine = c) %:% { :
# "%:%" was passed an illegal right operand