将rcpp变量转换为标准C++变量

use*_*833 6 c++ r type-conversion rcpp

我的输入如下:

Rcpp::NumericMatrix data(dataMatrix);
Rcpp::NumericVector xSize(dataXsize);
Rcpp::NumericVector ySize(dataYsize);
Rcpp::NumericVector tIndexes(testIndexes);
Rcpp::NumericVector cIndexes(controlIndexes);
Run Code Online (Sandbox Code Playgroud)

我试图调用的外部库有这个签名

WilcoxonTest(float * _data, int _dataXsize, int _dataYsize, vector<int> * _testIndexes, vector<int> * _controlIndexes);
Run Code Online (Sandbox Code Playgroud)

如何将Rcpp数据类型转换为C++标准数据类型?

注意:

 float * _data
Run Code Online (Sandbox Code Playgroud)

是浮点值的矩阵.该库假定它是这样的:

 float * _data = new float[dataXsize * dataYsize];
Run Code Online (Sandbox Code Playgroud)

jos*_*ber 8

为了得到一个std::vector<float>出你的NumericMatrix,你可以使用:

std::vector<float> dat = Rcpp::as<std::vector<float> >(data);
Run Code Online (Sandbox Code Playgroud)

该向量中的数字将被存储,因为它们存储在R中的矩阵中(例如,matrix(1:4, nrow=2)将导致向量1 2 3 4).如果你需要转置,我会建议t从R内调用.

所有剩下的问题都是将其vector转换为C风格的原始指针.这可以通过以下方式完成:

float* _data = &dat[0];
Run Code Online (Sandbox Code Playgroud)

关于从std::vector对象中抓取原始向量的一些警告:如果稍后添加了对象dat或删除了对象dat,则_data指针可能变为无效.

您可以通过类似的Rcpp::as功能使用来获取其他参数:

int _dataXsize = Rcpp::as<int>(xSize);
int _dataYsize = Rcpp::as<int>(ySize);
std::vector<int> _testIndexes = Rcpp::as<std::vector<int> >(tIndexes);
std::vector<int> _controlIndexes = Rcpp::as<std::vector<int> >(cIndexes);
Run Code Online (Sandbox Code Playgroud)