R并行处理:动态导出和评估变量

问题描述 投票:0回答:1

我知道如何将变量导出到使用

parallel
doSNOW
注册的集群上。

我不明白的是:如果我事先不知道它们的变量名称,如何访问这些变量(例如使用

clusterEvalQ
clusterCall
)。

举下面这个人为的例子:

do_something_parallel <- function(chosen_letter){
  
  a = 1
  b = 2
  c = 3
  
  cl <- parallel::makeCluster(2)
  doSNOW::registerDoSNOW(cl)

  # Export selected letter on clusters
  parallel::clusterExport(cl, chosen_letter, envir = environment())

  # Desired behavior here: multiply selected letter by x2

}

do_something_parallel("a")
do_something_parallel("b")
do_something_parallel("c")

用户可以使用

a
参数选择
b
c
chosen_letter
,并将其导出到集群中。但是,如果他们想要将其乘以 2,那么如何才能访问
chosen_letter
呢?

我想过尝试使用

parse
eval
生成表达式并将其发送到
clusterEvalQ
但没有取得任何成果。

r parallel-processing
1个回答
0
投票
do_something_parallel <- function(chosen_letter){
  
  x <- list(a = 1, b = 2, c = 3)
  y <- x[[chosen_letter]]

  cl <- parallel::makeCluster(2)
  on.exit(parallel::stopCluster(cl))
  doSNOW::registerDoSNOW(cl)
  
  # Export selected letter on clusters
  parallel::clusterExport(cl, "y", envir = environment())
  
  parallel::clusterEvalQ(cl, y * 2)
  
}

do_something_parallel("a")
#[[1]]
#[1] 2
#
#[[2]]
#[1] 2

do_something_parallel("b")
#[[1]]
#[1] 4
#
#[[2]]
#[1] 4

do_something_parallel("c")
#[[1]]
#[1] 6
#
#[[2]]
#[1] 6
© www.soinside.com 2019 - 2024. All rights reserved.