簡體   English   中英

從`parallel`包中的非基本R包調用函數,而不在函數中對它們進行編碼

[英]Calling functions from non-base R packages in `parallel` package without librarying them within the function

可以說我正在嘗試運行以下代碼

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))

我沒有在gregmisc中看到任何combinations功能。 這可能是你的實際問題嗎?

使用clusterEvalQ()在每個節點上加載包應該有效,並且始終對我有效。 以下代碼幾乎逐字逐句地從小vignette("parallel")第8頁vignette("parallel")解除:

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

各個節點中的環境不同。 嘗試明確指定包:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM