首页 > 解决方案 > 从 Rcpp 函数生成 XPtr

问题描述

我正在编写一个R包,其中一个函数Rcpp::XPtr作为输入(作为 a SEXP)。但是,创建XPtrfromRcpp::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(&timesTwo), 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文件)中实现它。

我认为XPtrfrom的创建Function可能会让用户感到困惑,因此最好将其Function作为输入并在包内创建指向它的指针。我确实XPtr在我的包中使用它来提高速度。

建议非常感谢!

标签: rcppr-package

解决方案


推荐阅读