ddply()を並行して使用する簡単な実例を探していました。「foreach」パッケージをインストールしましたが、ddply(.parallel = TRUE)を呼び出すと、「並列バックエンドが登録されていません」という警告が表示されます)
誰かがddplyを並行して使用する簡単な実例を提供できますか?
簡単な作業例を次に示します。
> df <- data.frame(val=1:10, ind=c(rep(2, 5), rep(3, 5)))
> library(doSNOW)
> registerDoSNOW(makeCluster(2, type = "SOCK"))
> system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); sum(x) }, .parallel=FALSE)))
ind V1
1 2 25
2 3 55
user system elapsed
0.00 0.00 4.01
> system.time(print(ddply(df, .(ind), function(x) { Sys.sleep(2); sum(x) }, .parallel=TRUE)))
ind V1
1 2 25
2 3 55
user system elapsed
0.02 0.00 2.02
A. Hadley と連絡を取り合っていますが、当面このバグを修正する予定はありません。修正自体は誰でも試行できます。Hadley から受け取ったいくつかのヒントを次に示します。
「最も単純なレベルでは比較的簡単です。.export 引数を foreach に渡すだけです。理想的には、plyr は何をエクスポートするかを自動的に判断しますが、その間、.parallel を変更して foreach への引数のリストを取得します ( T/F の代わりに) を使用することは大きな一歩です.llply から始めて、それが機能するようになれば、他のすべての機能も機能するようになるのはかなり簡単です."
B. Windows で並列 foreach を動作させるには、snow と doSNOW を強くお勧めします。他の並列バックエンドは次のいずれかです: 1. Windows をサポートしていません 2. 64 ビット Windows では動作しません 3. Windows で動作するはずですが、バグが多すぎます。snow/doSNOW は、「すぐに使える」唯一のソリューションでした。
C. がんばって!
に並列バックエンドを登録しましたforeach
か?
foreach
で使用する前に、 の使用について読む必要がある場合がありますplyr
。
Unix 環境では、doMC パッケージとその関数 registerDoMC() を使用してこれを行うことができます。
> registerDoMC()
> example <- ddply(..., .parallel=TRUE)