Я пытаюсь написать программу на C ++, которая использует несколько функций из пакета infotheo R.
Я скачал исходные файлы для пакета и скопировал нужные мне файлы .cpp. Например,
#include "infotheo.h"
SEXP entropyR (SEXP Rdata, SEXP Rnrows, SEXP Rncols, SEXP Rchoice)
{
const int *data;
const int *nrows, *ncols, *choice;
SEXP res;
PROTECT(Rdata = AS_INTEGER(Rdata));
PROTECT(Rnrows= AS_INTEGER(Rnrows));
PROTECT(Rncols= AS_INTEGER(Rncols));
PROTECT(Rchoice= AS_INTEGER(Rchoice));
data = INTEGER_POINTER(Rdata);
nrows= INTEGER_POINTER(Rnrows);
ncols= INTEGER_POINTER(Rncols);
choice= INTEGER_POINTER(Rchoice);
PROTECT(res = NEW_NUMERIC(1));
bool *sel = new bool[*ncols];
for( int i=0; i<*ncols; ++i )
sel[i] = true;
REAL(res)[0] = entropy(data, *nrows, *ncols, *choice, sel);
UNPROTECT(5);
return res;
}
Очевидно, что здесь используется класс SEXP из пакета Rcpp. Моя программа не будет использовать R вообще. Мой вопрос: Лучший ли способ сделать это, чтобы переписать код, заменив типы SEXP на явные структуры данных C ++?
Этот учебник показывает, что Rcpp :: as может по существу преобразовать класс SEXP в другой. Но значит ли это, что мне снова придется заменять переменные SEXP на Foo (SEXP)? Или я должен преобразовать свой числовой массив в SEXP и продолжить работу с классами infotheo как есть?