5
我嘗試(使用snow::parLapply
)一些代碼依賴於一個包並行(即比snow
其他包)。由parLapply
調用該函數引用的對象必須明確地傳遞給使用clusterExport
集羣。有沒有辦法通過整個包到集羣,而不是明確地命名每個函數(包括軟件包的用戶函數調用!內部函數)在clusterExport
?傳遞整個包雪集羣
我嘗試(使用snow::parLapply
)一些代碼依賴於一個包並行(即比snow
其他包)。由parLapply
調用該函數引用的對象必須明確地傳遞給使用clusterExport
集羣。有沒有辦法通過整個包到集羣,而不是明確地命名每個函數(包括軟件包的用戶函數調用!內部函數)在clusterExport
?傳遞整個包雪集羣
所有節點上安裝的軟件包,並有所有節點上的代碼調用library(thePackageYouUse)
通過一個可用的命令,雞蛋像
clusterApply(cl, library(thePackageYouUse))
我覺得parallel
包附帶R最近的版本有例子 - - 例如,從help(clusterApply)
可以看出,這裏的boot
包裝無處不在:
## A bootstrapping example, which can be done in many ways:
clusterEvalQ(cl, {
## set up each worker. Could also use clusterExport()
library(boot)
cd4.rg <- function(data, mle) MASS::mvrnorm(nrow(data), mle$m, mle$v)
cd4.mle <- list(m = colMeans(cd4), v = var(cd4))
NULL
})
謝謝德克。有沒有什麼原因爲什麼做'clusterExport(ls())'會危險?這不會從包傳遞函數幫助,但它會節省很多頭痛的快速並行for循環(別人的,不是我的!),它依靠一噸的全局變量。 – Michael
這只是糟糕的設計,因爲它使用scattershot plus廚房水槽方法。在串行解決方案中設計你需要的東西,然後使其平行。 –
夠公平的,謝謝你的幫助。 – Michael