My input looks like this:
Rcpp::NumericMatrix data(dataMatrix);
Rcpp::NumericVector xSize(dataXsize);
Rcpp::NumericVector ySize(dataYsize);
Rcpp::NumericVector tIndexes(testIndexes);
Rcpp::NumericVector cIndexes(controlIndexes);
And the external library I'm trying to call has this signature
WilcoxonTest(float * _data, int _dataXsize, int _dataYsize, vector<int> * _testIndexes, vector<int> * _controlIndexes);
How can I convert the Rcpp data types into C++ standard data types?
Note:
float * _data
Is a matrix of floating point values. The library assumes its something like this:
float * _data = new float[dataXsize * dataYsize];
To get a std::vector<float>
out of your NumericMatrix
, you can use:
std::vector<float> dat = Rcpp::as<std::vector<float> >(data);
The numbers in this vector will be stored as they are stored in the matrix in R (e.g. matrix(1:4, nrow=2)
will result in a vector 1 2 3 4
). If you need the transpose, I would suggest calling t
from within R.
All that remains for your problem is converting the vector
into a C-style raw pointer. This can be done with:
float* _data = &dat[0];
Some words of warning about grabbing raw vectors out of std::vector
objects: if you later added objects to dat
or deleted dat
, the _data
pointer could become invalid.
You can grab the other parameters through similar use of the Rcpp::as
function:
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With