我注意到使用%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
循环。)