我使用以下方法创建了并行工作程序(所有工作程序都在同一台计算机上运行):
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
视为表达式,因此在此放置变量并不方便。