问题是你错误地应用了%:%
操作员。它旨在合并两个foreach
对象,从而产生单个foreach
对象可用于重复评估您提供给它的任何表达式。所以,如果你想使用%:%
, 你需要first合并两个foreach()
声明,以及then使用结果对象来驱动单个调用%do%
(或者就你而言,%dopar%
). See (1)下面举个例子。
或者,如果您想嵌套两个foreach()
对象、使用%do%
两次,如(2) below.
无论哪种方式都有效,尽管对于并行作业我可能更喜欢使用%:%
。不过,你的代码就像(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