我的输入如下:
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];
答案 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);