【发布时间】:2017-11-29 03:38:13
【问题描述】:
我已经使用 Rcpp 定义了一个函数,它在当前会话中运行。所以我尝试使用future包在每个worker进程中编译相同的函数,但是我遇到了错误
错误:构建共享库时发生错误 1。
是否有一种无需构建包即可轻松共享 Rcpp 功能的方法?
见下面的 MWE
library(Rcpp)
cppFunction('
NumericVector test(Rcpp::NumericVector x) {
return x;
}')
# test if compiled successful
test(1:2)
lapply(list(1:2), test) # works
future_lapply(list(1:2), function(a) {
library(Rcpp)
cppFunction('
NumericVector test(Rcpp::NumericVector x) {
return x;
}')
test(a)
})
【问题讨论】:
-
你想要做的基本上等同于通过
foreach传播基于 Rcpp 的函数。简而言之,你不能。他们坐在一个“随机”的本地记忆点。唯一可靠的方法是把它们放在一个包裹里,让每个工人装载包裹。那会奏效的。 -
有没有办法通过指针共享位置并将指针传递给工作人员?
-
问题是需要传输的内存内容。你不能。因此是一个包。
-
那么我会接受“否”的答案。
-
我认为答案不是“否”,而是“制作一个包裹”。