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