我正在尝试用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类吗?