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

MyCluster = makeCluster(8)

如何使这8个节点中的每一个源都成为我编写的R文件?
我试过了:
clusterCall(MyCluster, source, "myFile.R")
clusterCall(MyCluster, 'source("myFile.R")')

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

非常感谢你!

最佳答案

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

library(parallel)

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

## do some parallel work

stopCluster(cl)

您也可以使用clusterEvalQ()进行相同的操作:
library(parallel)

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

## do some parallel work

stopCluster(cl)

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

10-07 23:30