如何将 foreach 转换为 parLapply?
How to convert foreach into parLapply?
我需要将复杂的 foreach
循环转换为 parLapply
函数。
为简单起见,我将使用以下 foreach
循环:
library(foreach)
library(doParallel)
number_of_cores <- 8
clusters <- 8
doParallel::registerDoParallel(clusters)
m <- foreach(i=1:1000) %dopar% {matrix(rnorm(500*500), ncol=50000); NULL}
使用这个通用设置。为了再现性、导出库以及将变量和函数等对象导出到集群,我详细说明了使用通用种子的要求。
seed <- 42 ## define seed
R <- 3 ## No. repetitions
nr <- 3 ## define no. rows
nc <- 2 ## define no. columns
my_fun <- matrix ## define custom function
library(parallel)
cl <- makeCluster(detectCores() - 1) ## register cluster (usually one less)
clusterSetRNGStream(cl, seed) ## set seed
# clusterEvalQ(cl, library(foo)) ## export a library
clusterExport(cl, c("nr", "nc", "my_fun")) ## export variables and functions
r <- parLapply(cl=cl, X=1:R, fun=function(i) {
my_fun(rnorm(nr*nc), ncol=nc)
})
stopCluster(cl) ## stop cluster
r
# [[1]]
# [,1] [,2]
# [1,] -0.93907708 -0.4393582
# [2,] -0.04167943 -0.3140354
# [3,] 0.82941349 -2.1290236
#
# [[2]]
# [,1] [,2]
# [1,] 0.001100034 -0.3119474
# [2,] 1.763058291 0.6948795
# [3,] -0.166377859 0.3541931
#
# [[3]]
# [,1] [,2]
# [1,] -1.1378621 1.0303683
# [2,] -1.5197576 -0.9458347
# [3,] -0.9198612 -1.3057289
我需要将复杂的 foreach
循环转换为 parLapply
函数。
为简单起见,我将使用以下 foreach
循环:
library(foreach)
library(doParallel)
number_of_cores <- 8
clusters <- 8
doParallel::registerDoParallel(clusters)
m <- foreach(i=1:1000) %dopar% {matrix(rnorm(500*500), ncol=50000); NULL}
使用这个通用设置。为了再现性、导出库以及将变量和函数等对象导出到集群,我详细说明了使用通用种子的要求。
seed <- 42 ## define seed
R <- 3 ## No. repetitions
nr <- 3 ## define no. rows
nc <- 2 ## define no. columns
my_fun <- matrix ## define custom function
library(parallel)
cl <- makeCluster(detectCores() - 1) ## register cluster (usually one less)
clusterSetRNGStream(cl, seed) ## set seed
# clusterEvalQ(cl, library(foo)) ## export a library
clusterExport(cl, c("nr", "nc", "my_fun")) ## export variables and functions
r <- parLapply(cl=cl, X=1:R, fun=function(i) {
my_fun(rnorm(nr*nc), ncol=nc)
})
stopCluster(cl) ## stop cluster
r
# [[1]]
# [,1] [,2]
# [1,] -0.93907708 -0.4393582
# [2,] -0.04167943 -0.3140354
# [3,] 0.82941349 -2.1290236
#
# [[2]]
# [,1] [,2]
# [1,] 0.001100034 -0.3119474
# [2,] 1.763058291 0.6948795
# [3,] -0.166377859 0.3541931
#
# [[3]]
# [,1] [,2]
# [1,] -1.1378621 1.0303683
# [2,] -1.5197576 -0.9458347
# [3,] -0.9198612 -1.3057289