22

ddply()を並行して使用する簡単な実例を探していました。「foreach」パッケージをインストールしましたが、ddply(.parallel = TRUE)を呼び出すと、「並列バックエンドが登録されていません」という警告が表示されます)

誰かがddplyを並行して使用する簡単な実例を提供できますか?

4

4 に答える 4

18

簡単な作業例を次に示します。

> 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 
于 2013-01-23T20:20:42.457 に答える
6

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. がんばって!

于 2011-07-27T15:55:34.723 に答える
6

に並列バックエンドを登録しましたforeachか?

foreachで使用する前に、 の使用について読む必要がある場合がありますplyr

于 2011-07-21T17:33:29.370 に答える
4

Unix 環境では、doMC パッケージとその関数 registerDoMC() を使用してこれを行うことができます。

> registerDoMC()
> example <- ddply(..., .parallel=TRUE)
于 2011-11-14T18:25:38.540 に答える