2

スノーパッケージのparXapply()関数は、データが1つのリストまたは行列にのみ含まれている場合に非常にうまく機能しますが、この場合、4つの異なるタイプの行列で関数を実行する必要があります。

たとえば、これは私が今持っているものです:

res.list = parLapply(cl, mynames, myfun, listA, listB, listC, listD)

myfun = function(name, listA, listB, listC, listD) {
  matrixA = listA[[name]]
  matrixB = listB[[name]]
  matrixC = listC[[name]]
  matrixD = listD[[name]]
}

私が抱えている問題は、行列が非常に大きいことであり、完全なリストでparLapply()を呼び出すには、すべてのデータを各クラスターノードに転送する必要があると思われます。これには非常に時間がかかり、クラスターのパフォーマンスが低下する可能性があります。

myfun()を呼び出す前にリストを分割し、処理のために関連する行列のみを各ノードに送信するにはどうすればよいですか?

4

2 に答える 2

5

clusterMap()は次の役割を果たします。

res.list = clusterMap(cl, myfun, mynames, listA, listB, listC, listD)

どういうわけか、parMapply()ラッパーはパッケージから除外されました。

于 2012-05-11T19:48:53.950 に答える
0

ロバート・キューブリックの答えは、を使用してこの質問に最もよく答えると思いますclusterMapmcmapplyただし、関連する質問への回答を検索している他の人は、別のオプション(のマルチコアバージョン)の恩恵を受ける可能性があると思いますmapply。例えば:

mcmapply(rep, 1:4, 4:1)

mcmapplymapplyフォークを使用して並列を実装します。これは、Windowsマシンではオプションではないことを意味します。さらに、GUI内でRを実行している場合は、問題が発生する可能性があります。ちなみに、mclapplyのマルチコアバージョンもありlapplyます。

つまりmcmapply、とは、他の方法で呼ばれるとmclapply予想されるものの最も単純なバージョンです。parMapplyparLapply

于 2014-08-12T22:37:24.003 に答える