2012-05-11 16 views
1

スノーパッケージの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()を呼び出す前にリストを分割し、関連する行列を各ノードに送信して処理するにはどうすればよいですか?

+0

mapply()のように見えますが、私は必要ですが、雪の中では利用できません。 –

答えて

3

clusterMapは()仕事をしていません:

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

は、どういうわけかparMapply()のラッパーは、パッケージの外に残っていました。

0

私はロバートキューブリックの回答がclusterMapを使ってこの質問に最もよく答えたと思います。しかし、私は関連する質問に対する回答を探している他の人たちが別のオプション(mapplyのマルチコアバージョン)であるmcmapplyの恩恵を受けていると思います。たとえば:

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

mcmapplyは、Windowsマシン上のオプションではないことを意味フォークを、使用して並列mapplyを実装しています。さらに、GUI内でRを実行していると、複雑なことが起こります。ところで、lapplyのマルチコアバージョンであるmclapplyもあります。

したがってmcmapplyとは、parMapplyparLapplyと呼ばれることが予想される最も単純なバージョンです。

関連する問題