我在获取一些代码以使用 R 中的并行包时遇到问题。我使用的是 R 2.15。
这是一个简化的示例...我有一个文件“animal.R”,其中包含以下内容:
# animal.R
setClass("Animal", representation(species = "character", legs = "numeric"))
##Define some Animal methods
setGeneric("count",function(x) standardGeneric("count"))
setMethod("count", "Animal", function(x) { x@legs})
setGeneric("countAfterChopping",function(x) standardGeneric("countAfterChopping"))
setMethod("countAfterChopping", "Animal", function(x) { x@legs <- x@legs-1; x@legs})
然后,在我的 R 终端中,我运行:
library(parallel)
source('animal.R')
启动两个节点的本地集群:
cl <- makeCluster(rep('localhost', 2))
告诉集群节点有关 Animal 类的信息:
clusterEvalQ(cl, parse('animal.R'))
然后在集群上运行一些代码:
# This works
parSapply(cl, list(daisy, fred), count)
# This doesn't...
parSapply(cl, list(daisy, fred), countAfterChopping)
停止集群:
stopCluster(cl)
对 parSapply 的第一次调用按预期工作,但第二次产生此错误:
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: "Animal" is not a defined class
有什么想法吗?为什么第二次调用 parSapply 不起作用?