4

内側のループを順番に実行しながら、外側のループを並列化しようとしています。次のコードは、パッケージを使用すると Revolution で機能しますが、とパッケージdoSMPを使用するとベース R では機能しません(Windows マシン上の両方の R バージョン)。エラー メッセージは次のとおりです。この問題を解決する方法はありますか?foreachdoParallelcould not find function "%do%"

foreach(j = X, .combine = c) %dopar% { 
    Z=1
    foreach(i = Y, .combine = c) %do% { 
        paste(j, i, Z, sep = "") 
    } 
}
4

1 に答える 1

4

通常、ループ内でパッケージを使用する必要がある場合はforeach、「.packages」オプションで指定する必要があります。foreachこれは、パッケージ自体にも当てはまります。

library(doParallel)
cl <- makePSOCKcluster(3)
registerDoParallel(cl)
foreach(j = X, .combine = c, .packages='foreach') %dopar% { 
    Z=1
    foreach(i = Y, .combine = c) %do% { 
        paste(j, i, Z, sep = "") 
    } 
}

これは、PSOCK クラスターが によって使用されていることさえ認識していないことに気付くと、ある程度の意味がありますforeach。これは、通常の PSOCK クラスターです。

一部の並列バックエンドでは、必要なすべてのパッケージを指定する必要がない場合があることに注意してください。たとえば、doMC を使用すると、ワーカーは現在読み込まれているすべてのパッケージを継承します。ただし、コードの移植性を高めるために、それらを指定することをお勧めします。

于 2013-10-07T22:21:44.850 に答える