从Rcpp函数

时间:2018-05-27 00:26:54

标签: rcpp r-package

我正在编写一个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(&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文件)。

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

建议非常感谢!

0 个答案:

没有答案