如何将 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