我已经使用Rcpp定义了一个函数,它在当前会话中运行。所以我尝试使用future
包在每个工作进程中编译相同的函数,但是我遇到了错误
错误:构建共享库时出现错误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)
})
答案 0 :(得分:4)
这个问题实际上相当于通过foreach
传播基于Rcpp的函数。简而言之,您无法序列化基于Rcpp的函数并将其传递。
他们坐在“随机”的本地记忆点。唯一可靠的方法是将它们粘在一个包中,让每个工人加载包。这将有效。