0

我有一些 plyr 代码,用于运行我编写的 Rcpp 函数:

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 回答