私は並列パッケージを使用するのは初めてで、作業の一部を高速化するためにそれらを調査し始めました。私がよく遭遇する煩わしさは、関連する関数/変数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
ますか?