如何为并行计算选择变量名?
How to choose variable names for parallel computing?
我正在使用 foreach
包进行并行计算。在循环中,我定义了具有固定名称(如 "temp")的临时变量,这些变量将在下一次迭代中被覆盖,因为我通常在经典循环中这样做。现在我想知道这是否可以使用并行计算,或者在进行并行计算时是否会混淆变量。
基本上,潜在的问题是临时变量是否被赋予 "local"(关于迭代)临时名称。程序是否检测到哪些变量在整个迭代过程中具有相同的名称,以便为它们提供此 "local" 临时名称。
'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)
我正在使用 foreach
包进行并行计算。在循环中,我定义了具有固定名称(如 "temp")的临时变量,这些变量将在下一次迭代中被覆盖,因为我通常在经典循环中这样做。现在我想知道这是否可以使用并行计算,或者在进行并行计算时是否会混淆变量。
基本上,潜在的问题是临时变量是否被赋予 "local"(关于迭代)临时名称。程序是否检测到哪些变量在整个迭代过程中具有相同的名称,以便为它们提供此 "local" 临时名称。
'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)