1

マルチスレッド R スクリプトを実行していますが、クラスターからの出力の生成に問題があります。

outFun <- function()
{
  cat(sample(0:9,1));
}
require(snow)
clust <- makeCluster(4)
clusterExport(clust,"outFun")
clustFun <- function(i){outFun()}
clusterApplyLB(clust,1:8,clustFun)

新しいRスレッドにあるため、出力が表示されないことは理解していますが、outFun()この出力をマスタースレッドに転送して、印刷時に表示されるようにする方法があることを望んでいました.

編集:この質問は Linux マシンでこれに答えますが、解決策は Windows では機能しません。与えられた回避策は、単純にファイル出力を使用することですが、実際に Windows のマスター スレッドに出力を送り返すことができる解決策を誰かが知っているかどうか知りたいです。

4

1 に答える 1

2

Rgui は子プロセスからの出力を表示ウィンドウに送信しないため、このmakeCluster outfile=""オプションは Windows の Rgui では機能しません。ただし、outfile=""単純なコンソール プログラムであるため、Rterm プログラムで動作します。

C:\Program Files\R\R-3.0.2\bin\i386> rterm -q
> library(parallel)
> clust <- makeCluster(4, outfile="")
starting worker pid=1596 on localhost:11862 at 09:13:30.005
starting worker pid=1192 on localhost:11862 at 09:13:30.342
starting worker pid=1616 on localhost:11862 at 09:13:30.679

「ワーカーの開始」メッセージは、ワーカー プロセスが関数を実行する直前に送信されslaveLoopます。タスクを実行したワーカーからの出力も表示されるはずです。

> clusterEvalQ(clust, message("hello"))
hello
hello
hello
hello
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL
于 2013-10-14T13:29:07.677 に答える