我的输入是这样的:
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];
最佳答案
获取std::vector<float>
从你的NumericMatrix
,你可以使用:
std::vector<float> dat = Rcpp::as<std::vector<float> >(data);
此 vector 中的数字将按照它们在 R 中的矩阵中的存储方式进行存储(例如 matrix(1:4, nrow=2)
将生成一个 vector 1 2 3 4
)。如果您需要转置,我建议您调用 t
来自 R 中。
您的问题剩下的就是转换 vector
转换为 C 风格的原始指针。这可以通过以下方式完成:
float* _data = &dat[0];
关于从 std::vector
中获取原始 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);
关于c++ - 将 rcpp 变量转换为标准 C++ 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21362844/