2013-09-03 9 views
5

私はクロスプラットフォームになりたい、R用のパッケージをビルドしています。私はLinuxの下で開発しており、parallelパッケージからはmclapplyという関数が使用されます。このパッケージは、Windows(doParallelを使用)ではサポートされていません。私は実際にparallelパッケージを好んでいますが、シンプルさとスピードの点では、この2つの異なるバージョンのパッケージをCRAN用に用意する必要があるかどうかは分かりません。別のOS(維持する余分な作業のようです)それが許されるかどうかについて言及する。CRANパッケージとして複数のOSにパラレルまたはdoParallelを使用するカスタムパッケージ

思考? '

mclapply(ldata, function(x), mc.cores=cores) 

doParallelの同等であることを' 今の私がいますについても

は、 parallel

cl <- makeCluster(cores) 
parLapply(cl, ldata, function(x)) 

ことは正しいですか?

+1

私はこれがクロスプラットフォームであると信じているので、 'parallel'パッケージから' parLapply'を使用してみませんか? 'Sys.info()[" sysname "]'で 'if(){else {}'を使って正しい設定を使うこともできます。 –

+0

@Tyler Rinker、parLapplyは新しいスクリプトごとに.Rprofileの読み込みを表示しますか?もしそうなら、それはフォークではないので、良いと思う。 – PascalVKooten

+0

'parallel' **はウィンドウで**サポートされ、' mclapply'が使用できます。シンプルな 'lapply'のように、一連の評価に戻ります。 –

答えて

9

mclapplyparLapplyの両方は、パッケージに含まれていますが、Windowsではは実際には並行して実行されません。 parLapplyは、サポートされているすべてのプラットフォームで並行して実行されますが、常に効率的であるとは限りません。mclapplydoParallelパッケージは、foreachパッケージとともに使用され、parallelパッケージのアダプタとして機能します。それはWindows上でどこでも使用parLapply

  • 動作し、他の場所でmclapply
  • 以来

    • ちょうどparLapplyを使用します。

      のWindowsと非Windowsの両方で動作するパッケージを作成するには、合理的な様々なオプションを持っていますforeach

  • 使用パッケージは、Windows以外のプラットフォームではmclapplyを使用しているので便利です。たとえば:

    library(doParallel) 
    registerDoParallel() 
    foreach(i=1:10, .options.snow=list(preschedule=TRUE)) %dopar% { 
        Sys.sleep(2) 
    } 
    

    これは、LinuxおよびMac OS X上でmclapplyを使用していますが、自動的にWindows上の舞台裏PSOCKクラスタオブジェクトを作成します。 preschedule=TRUEdoParallel 1.0.3で追加)を使用すると、parLapplyのように、内部でclusterApplyを使用しているタスク〜の事前予約が発生します。

    クラスタオブジェクトを明示的に作成して登録する場合は、プラットフォームに関係なく、mclapplyではなく、となります。それは正常に動作しますが、効率的ではないかもしれません。 mclapplyを使用するには、数字の引数を使用するか、まったく引数を指定しないでregisterDoParallelを呼び出す必要があります。

    プラットフォームに応じて、mclapplyまたはparLapplyのいずれかを使用する方法の例については、bootパッケージのソースコードを参照してください。

  • 関連する問題