我使用foreach
包进行并行计算。在循环中,我定义了具有固定名称的临时变量(例如" temp"),这些变量将在下一次迭代中被覆盖,因为这是我在经典循环中通常的方式。现在我想知道使用并行计算是否可行,或者在进行并行计算时是否会混淆变量。
基本上,基本问题是临时变量是否被赋予" local" (关于迭代)临时名称与否。程序是否在整个迭代过程中检测哪些变量具有相同的名称,以便为它们提供这样的“本地”#34;临时名称。
答案 0 :(得分:1)
'foreach'在这方面遵循'for'的相同逻辑。临时对象不在全局环境中。请看下面的示例。
library(foreach)
library(doSNOW)
cores <- 2
cl <- makeCluster(cores)
registerDoSNOW(cl)
# data
n <- 4
m <- lapply(1:n, function(i) matrix((1:4), 2, 2))
rnames <- c("r1", "r2")
x <- foreach (i = 1:n) %dopar% {
temp <- m[[i]] * i
temp <- as.data.frame(temp)
data.frame(r = rnames, temp)
}
x # each new matrix are in the correct order in the output list
temp # it exist only inside the foreach
stopCluster(cl)