我注意到使用%do%
和%dopar%
涉及变量管理的不同行为。这是一个 MWE 来说明我的意思
library(foreach)
library(doParallel)
library(iterators)
a = 1
foreach(icount(10)) %do% {a = a + 1}
print(a)
# [1] 11
registerDoParallel(cores = 1)
a = 1
foreach(icount(10)) %dopar% {a = a + 1}
print(a)
# [1] 1
在第一种情况下a
递增,而在第二种情况下,循环获取副本并且a
不会更改。我预计第二个行为%dopar%
也适用于%do%
. 有没有办法在不使用的情况下强制执行%dopar%
(因为我在小插图中使用嵌套foreach
循环)。foreach