doRedis を使用して R クラスターを作成し、foreach で計算の一部を並列処理しようとしていますが、エラーが発生し続けます。私のコードは foreach %do% で動作しますが、%dopar% でクラスター上で実行しようとすると失敗します。doRedis ドキュメントのサンプル コードも実行してみましたが、これも失敗しました。以下は、メイン スクリプトとワーカーの R コンソールです。
メインの R コンソール:
> require('doRedis')
> registerDoRedis('work')
> getDoParWorkers()
[1] 2
> foreach(j=1:10,.combine=sum,.multicombine=TRUE) %dopar%
+ 4*sum((runif(1000000)^2 + runif(1000000)^2)<1)/10000000
[1] "interrupt: \n"
Error in tryCatchOne(expr, names, parentenv, handlers[[1L]]) :
attempt to apply non-function
In addition: Warning message:
In e$fun(obj, substitute(ex), parent.frame(), e$data) :
Queue length off by 10...correcting
ワーカー コンソール:
> require('doRedis')
> redisWorker('work')
Waiting for doRedis jobs.
Processing job 3 from queue work
Error in names(z) <- w[o] :
'names' attribute [69] must be the same length as the vector [68]
何がエラーの原因なのかはわかりませんが、ワーカーに送信したすべての結果がこのエラーになるようです:
`Error in names(z) <- w[o] :
'names' attribute [69] must be the same length as the vector [68]`
これを修正する方法はありますか?