Как я могу использовать исходный код из пакета R в C ++? - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь написать программу на 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 как есть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...