我正在编写一个R
包,其中一个函数将Rcpp::XPtr
作为输入(作为SEXP
)。但是,从XPtr
创建Rcpp::Function
是我想要在包内做的事情(即,用户应该能够输入Function
)。
例如,我的包接受如下生成的输入,这需要用户编写一个附加功能(此处为putFunPtrInXPtr()
)并在R
中运行该功能以生成XPtr
(此处) my_ptr
)。
#include <Rcpp.h>
using namespace Rcpp;
typedef NumericVector (*funcPtr) (NumericVector y);
// [[Rcpp::export]]
NumericVector timesTwo(NumericVector x) {
return x * 2;
}
// [[Rcpp::export]]
XPtr<funcPtr> putFunPtrInXPtr() {
XPtr<funcPtr> testptr(new funcPtr(×Two), false);
return testptr;
}
/*** R
my_xptr <- putFunPtrInXPtr()
*/
如何撰写用户提供的内容Function user_fun
并创建XPtr
?
我试过
XPtr<funcPtr> package_fun(Function user_fun_input){
XPtr<funcPtr> testptr(new funcPtr(&user_fun_input), false);
}
user_fun_input
是包函数中的参数名称,但是我收到以下错误
cannot initialize a new value of type 'funcPtr' (aka 'Vector<14> (*) (Vector<14>') with an rvalue of type 'Rcpp::Function *' (aka 'Function_Impl<PreserveStorage> *')
此外,创建指针涉及R
步骤,我不知道如何在包中实现它(我的.cpp
文件)。
我认为从XPtr
创建Function
可能会让用户感到困惑,所以最好只需将Function
作为输入并在包内创建指向它的指针。我确实使用了我的包中的XPtr
来提高速度。
建议非常感谢!