7

私は並列パッケージを使用するのは初めてで、作業の一部を高速化するためにそれらを調査し始めました。私がよく遭遇する煩わしさは、関連する関数/変数foreachがない場合にコマンドが問題を引き起こすことです。clusterExport

以下の例は必ずしも高速にする必要がないことはわかっていますforeachが、説明のために使用します。

library(doParallel)
library(parallel)
library(lubridate)
library(foreach)

cl <- makeCluster(c("localhost", "localhost", "localhost","localhost"), type = "SOCK")
registerDoParallel(cl, cores = 4)

Dates <- sample(c(dates = format(seq(ISOdate(2010,1,1), by='day', length=365), format='%d-%m-%Y')), 500, replace = TRUE)

foreach(i = seq_along(Dates), .combine = rbind) %dopar% dmy(Dates[i])

Error in dmy(Dates[i]) : task 1 failed - "could not find function "dmy""

ご覧のとおり、dmy関数が見つからないというエラーが表示されます。次に、次を追加する必要があります。

clusterExport(cl, c("dmy"))

だから私の質問は、何をエクスポートするかの手がかりを得るためにエラーを見る以外に、どのオブジェクトをエクスポートするかを事前に知るためのよりエレガントな方法はありますか、それともグローバル環境をすべてのスレーブと共有する方法はありforeachますか?

4

1 に答える 1

2

そのように個々のパッケージ関数を手動でエクスポートする必要はありません。.packages関数の引数を使用しforeachて必要なパッケージをロードできるため、すべてのパッケージ関数を%dopar%式で使用できます。

于 2012-05-21T16:01:09.293 に答える