私は大きなdata.tableを持っています。各並列プロセスはそこから読み取り、データを処理し、はるかに小さい data.table を返します。大きな DT をすべてのプロセスにコピーしたくないのですが、パッケージ内の%dopar%
関数をコピーする必要があるようです。foreach
オブジェクトをすべてのプロセス (ウィンドウ内) で共有する方法はありますか? つまり、 以外のパッケージを使用しますforeach
。
サンプルコード
library(doParallel)
cluster = makeCluster(4)
registerDoParallel(cluster)
M = 1e4 # make this larger
dt = data.table(x = rep(LETTERS, M), y = rnorm(26*M))
res = foreach(trim = seq(0.6, 0.95, 0.05), .combine = rbind) %dopar% {
dt[, .(trimmean = mean(y, trim = trim)), by = x][, trim := trim]
}
(並列を使用せずにdata.tableでこれを行うより良い方法には興味がありません。これは、サブプロセスが処理するすべてのデータを読み取る必要があるが、決して変更しないというケースを示すためです)