Rcpp - 如何在C ++中使用R包中的源代码?

时间:2018-04-26 09:41:03

标签: c++ r rcpp

我正在尝试用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;
}

显然,这使用了Rcpp包中的SEXP类。我的程序根本不会使用R.我的问题是:这是用最好的方法来重写使用显式C ++数据结构替换SEXP类型的代码吗?

This教程显示Rcpp :: as本质上可以将SEXP类转换为另一个。 但这是否意味着我将再次用Foo(SEXP)替换SEXP变量?或者我应该将我的数字数组转换为SEXP,并继续使用infotheo类吗?

0 个答案:

没有答案