【问题标题】:Calling functions from non-base R packages in `parallel` package without librarying them within the function从 `parallel` 包中的非基本 R 包调用函数,而不在函数中将它们库化
【发布时间】:2014-04-16 00:26:54
【问题描述】:

假设我正在尝试运行以下代码

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)

问题是,我怎样才能避免函数内的库包?

我看到在herehere 中已经针对“雪”和“降雪”提出了类似的问题

但我无法让它为“并行”包工作

我试过了(没有成功)

library(snow)
library(snowfall)
sfExport(list=list("combinations"))
sfLibrary(gregmisc)
clusterEvalQ(cl, library(gregmisc))

【问题讨论】:

    标签: r parallel-processing


    【解决方案1】:

    我在 gregmisc 中没有看到任何 combinations 函数。这可能是您的实际问题吗?

    使用clusterEvalQ() 在每个节点上加载包应该可以工作,并且一直对我有用。 以下代码几乎是从vignette("parallel") 的第 8 页逐字提取的:

    require(parallel)
    cl <- makeCluster(4)
    junk <- clusterEvalQ(cl, library(boot)) ## Discard result
    

    【讨论】:

    • 对不起,在gtools包里,gregmisc包只是自动调用gtools
    • 你是对的,我不小心用clusterEvalQ() 调用了错误的库。我将编辑您的答案,使其完全适合问题
    • @DavidArenburg 我回滚了您的编辑,以便:(1)代码继续匹配文本; (2) 对您问题的实际核心(如何在集群的每个节点上加载包)的响应继续脱颖而出。我相信人们可以很好地概括,看看这将如何适用于您的具体情况!
    • 我已经尝试使用这个解决方案&gt; require(parallel) &gt; cl &lt;- makeCluster(5) &gt; clusterEvalQ(cl, library(mice)) 但是我得到了错误:Error in checkForRemoteErrors(lapply(cl, recvResult)) : 3 nodes produced errors; first error: package ‘lattice’ could not be loaded 你知道@JoshO'Brien 可能是什么问题吗?
    • @AP30 不是。不过,我的第一步是找出哪些节点抛出了错误,然后登录到其中一个节点,以便我可以交互式地四处寻找,以确定是哪一部分设置导致了问题。祝你好运!
    【解决方案2】:

    各个节点的环境不一样。尝试明确指定包:

    myfunction <- function(x){
      gregmisc::combinations(10, x, 1:10)
    }
    

    【讨论】:

    • 你真的是想写gregmisc::combinations 吗?
    • 糟糕,我是用手机写的
    • 是否有适用于 iPhone 的 R 解释器?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多