是否可以将 Rcpp 函数传递给子进程?

Is it possible to pass Rcpp functions to a child process?

我已经使用 Rcpp 定义了一个函数,它 运行 在当前会话中。所以我尝试使用future包在每个工作进程中编译相同的功能,但我运行进入错误

Error: Error 1 occurred building shared library.

是否有无需构建包即可共享 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 的函数。简而言之,您不能序列化基于 Rcpp 的函数并传递它。

它们位于 "random" 本地记忆点。唯一可靠的方法是将它们贴在一个包裹中,让每个工人装载包裹。那行得通。