R中的并行化:如何在每个节点上“来源”?

Ber*_*rnd 4 parallel-processing r

我使用以下方法创建了并行工作程序(所有工作程序都在同一台计算机上运行):

MyCluster = makeCluster(8)
Run Code Online (Sandbox Code Playgroud)

如何使这8个节点中的每一个源都成为我编写的R文件?我试过了:

clusterCall(MyCluster, source, "myFile.R")
clusterCall(MyCluster, 'source("myFile.R")')
Run Code Online (Sandbox Code Playgroud)

和几个类似的版本。但是没有一个有效。您能帮我发现错误吗?

非常感谢你!

Kun*_*Ren 5

以下代码可满足您的目的:

library(parallel)

cl <- makeCluster(4)
clusterCall(cl, function() { source("test.R") })

## do some parallel work

stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

您也可以clusterEvalQ()用来做同样的事情:

library(parallel)

cl <- makeCluster(4)
clusterEvalQ(cl, source("test.R"))

## do some parallel work

stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

但是,两种方法之间存在细微的差异。clusterCall()在每个节点上运行一个函数,同时在每个节点上clusterEvalQ()计算一个表达式。如果您有要导出的文件的变量列表,clusterCall()则将更易于使用,因为clusterEvalQ(cl,expr)它将任何内容都expr视为表达式,因此在此处放置变量并不方便。