让我说我正在尝试运行以下代码
library(gregmisc)
library(parallel)
myfunction <- function(x){
combinations(10, x, 1:10)
}
cl <- makeCluster(getOption("cl.cores", 2))
parLapply(cl, 3, myfunction)
我收到了错误
#Error in checkForRemoteErrors(val) :
#one node produced an error: could not find function "combinations"
因此,如果我在函数库中使用“gregmisc”软件包,它将起作用
myfunction <- function(x){
library(gregmisc)
combinations(10, x, 1:10)
}
cl <- makeCluster(getOption("cl.cores", 2))
parLapply(cl, 3, myfunction)
问题是,如何避免在函数中编写程序包?
中看到类似的问题已经被问到“雪”和“降雪”了但我无法让它为“并行”包
工作我尝试过(没有成功)
library(snow)
library(snowfall)
sfExport(list=list("combinations"))
sfLibrary(gregmisc)
clusterEvalQ(cl, library(gregmisc))
答案 0 :(得分:3)
我在 gregmisc 中看不到任何combinations
功能。这可能是你的实际问题吗?
使用clusterEvalQ()
在每个节点上加载包应该有效,并且始终对我有效。
以下代码几乎逐字逐句地从vignette("parallel")
的第8页解除:
require(parallel)
cl <- makeCluster(4)
junk <- clusterEvalQ(cl, library(boot)) ## Discard result
答案 1 :(得分:2)
各个节点中的环境不同。尝试明确指定包:
myfunction <- function(x){
gregmisc::combinations(10, x, 1:10)
}