Генерация XPtr из функции Rcpp - PullRequest
0 голосов
/ 27 мая 2018

Я пишу пакет 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 в своем пакете, чтобы набрать скорость.

Предложения приветствуются!

...