我有一些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""
如何让我的库可供并行进程访问?
答案 0 :(得分: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"))
正常R会话中的 library(mypackage); .Call("myfancyfunction", x, PACKAGE="mypackage")
可能会引发相同的错误。
请参阅编写R扩展程序中的Registering native routines,了解有关注册myfancyfunction
的方法的详细信息。