R参考类与双平行

R参考类与双平行,r,parallel-processing,reference-class,R,Parallel Processing,Reference Class,最近,我正在尝试将引用类与并行一起使用。我尝试了4种不同的方案,多核、MPI、套接字和分叉。然而,只有多核才能产生正确的结果。MPI、PSOCK和Forking都会产生错误 PS:我在一个支持MPI的计算机集群上运行这个脚本 library(doParallel) np = 4L # cl <- makeCluster(np, type="MPI", outfile = "") # cl <- makeCluster(np, type="PSOCK", outfile = "")

最近,我正在尝试将引用类与
并行
一起使用。我尝试了4种不同的方案,多核、MPI、套接字和分叉。然而,只有多核才能产生正确的结果。MPI、PSOCK和Forking都会产生错误

PS:我在一个支持MPI的计算机集群上运行这个脚本

library(doParallel)

np = 4L
# cl <- makeCluster(np, type="MPI", outfile = "")
# cl <- makeCluster(np, type="PSOCK", outfile = "")
# cl <- makeCluster(np, type="FORK", outfile = "")
cl <- np # multicore

registerDoParallel(cl)
myClass = setRefClass("myClass",
    fields = c("a"),
    methods = list(
        hello = function(){cat("hello\n")},
        show = function(){cat("show\n")}
    )
)
objs = foreach(i = 1:4) %dopar% {
    obj = new("myClass")
    obj$a=i
    obj
}
库(双并行)
np=4L

#cl问题是集群工作程序需要初始化。对于这种情况,我将使用
clusterEvalQ
clusterCall

clusterEvalQ(cl, {
    myClass <- setRefClass("myClass",
                           fields = c("a"),
                           methods = list(
                               hello = function(){cat("hello\n")},
                               show = function(){cat("show\n")}
                           ))
    NULL
})
clusterEvalQ(cl{

myClass谢谢,有趣的是,我在自己的计算机上使用“FORK”群集没有问题,在我的学校群集上也有问题(与MPI和PSOCK相同)。但无论如何,我不会在我的学校群集上使用“FORK”。我注意到引用类“实例”由
new
创建的,将克隆到辅助对象,另一方面,
引用类
定义不会“克隆”到辅助对象。
clusterEvalQ(cl, {
    myClass <- setRefClass("myClass",
                           fields = c("a"),
                           methods = list(
                               hello = function(){cat("hello\n")},
                               show = function(){cat("show\n")}
                           ))
    NULL
})