是否可以将 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" 本地记忆点。唯一可靠的方法是将它们贴在一个包裹中,让每个工人装载包裹。那行得通。
我已经使用 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" 本地记忆点。唯一可靠的方法是将它们贴在一个包裹中,让每个工人装载包裹。那行得通。