0

私が書いたRcpp関数を実行するためのplyrコードがあります:

nodes = detectCores()
cl = makeCluster(nodes)
registerDoParallel(cl)

l = llply(mylist, function(x) {
 .Call("myfancyfunction", PACKAGE = "mypackage", ...)
}, .parallel = TRUE, .paropts = list(.packages = "mypackage")) 

ただし、パッケージを含めてもエラーが発生します。

Error in do.ply(i) : 
  task 1 failed - ""myfancyfunction" not available for .Call() for package "mypackage""

並列プロセスがライブラリにアクセスできるようにするにはどうすればよいですか?

4

1 に答える 1

0

このエラーは、plyr または並列処理の問題を示すものではありません。これは、C/C++ ルーチンがパッケージに正しく登録されていないことを意味します。たとえば、これは機能します:

library(plyr)
library(doParallel)
nodes = detectCores()
cl = makeCluster(nodes)
registerDoParallel(cl)
l <- llply(list(1,2), function(x) {
  .Call("endpoints", 1L, 1L, 1L, TRUE, PACKAGE="xts")
}, .parallel=TRUE, .paropts=list(.packages="xts"))

library(mypackage); .Call("myfancyfunction", x, PACKAGE="mypackage")通常の R セッションでは、同じエラーがスローされる可能性があります。

登録方法の詳細については、R 拡張機能の記述のネイティブ ルーチンの登録を参照してください。myfancyfunction

于 2013-08-14T16:01:03.540 に答える