0

我正在尝试在 R 中使用foreach和进行并行编程future.apply

下面是一个示例代码。

# libraries
library(doFuture)
library(future.apply)
library(foreach)


registerDoFuture()
plan(cluster, workers = 4)


# function
mean_rnorm <- function(n, mean, sd)
{
  # numbers 
  num <- rnorm(n = n, mean = mean, sd = sd)
  
  # mean
  mean(num)
}


# 1. calculate means in parallel using 'foreach'
res <- foreach(n = seq(10, 10000, 10)) %dopar% 
  mean_rnorm(n, mean = 2, sd = 3)


# 2. calculate means in parallel using 'future.apply'
res <- future_lapply(n = seq(10, 10000, 10), 
                     FUN = mean_rnorm, mean = 2, sd = 3)   

问题 1. - 由于任务数量很大,每个任务生成随机数和计算均值的速度非常快。所以为了尽量减少master和worker之间的通信开销,我希望一次给worker多个任务,让他们一起返回结果。

a)foreach正在工作,但我怎样才能将任务分成 4 个块foreach

b) 为什么部分代码有错误future_lapply,如何将任务分成 4 个块?(is.vector(X) 中的错误:缺少参数“X”,没有默认值)

………………………………………………………………………………………………………………………………………………

问题 2. - 下面的代码 - 我改变了nmeanforeach正在工作但future_lapply不工作。

# 1. calculate means in parallel using 'foreach'
res <- foreach(n = seq(10, 10000, 10), mean = seq(10, 10000, 10)) %dopar% 
  mean_rnorm(n, sd = 3)


# 2. calculate means in parallel using 'future.apply'
res <- future_lapply(n = seq(10, 10000, 10), mean = seq(10, 10000, 10),
                     FUN = mean_rnorm, sd = 3) 
4

0 回答 0