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)
为了得到一个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)
| 归档时间: |
|
| 查看次数: |
2550 次 |
| 最近记录: |