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

时间:2014-01-26 11:33:57

标签: 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);

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

WilcoxonTest(float * _data, int _dataXsize, int _dataYsize, vector<int> * _testIndexes, vector<int> * _controlIndexes);

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

注意:

 float * _data

是浮点值的矩阵。该库假设如下:

 float * _data = new float[dataXsize * dataYsize];

1 个答案:

答案 0 :(得分:7)

要从std::vector<float>中获取NumericMatrix,您可以使用:

std::vector<float> dat = Rcpp::as<std::vector<float> >(data);

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

您的问题仍然存在,就是将vector转换为C风格的原始指针。这可以通过以下方式完成:

float* _data = &dat[0];

关于从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);