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

标签 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];

最佳答案

获取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/

相关文章:

python - 从 c++ 中的 python 程序中检索 stderr

c++ - 通过基类 'create' 方法仅将对象创建为共享指针

c++ - Callgrind:如何使用 Callgrind 工具评估函数速度

r - 使用变量名通过 mutate 定义列内容

python - R 和 python 中的 h2o 包

scala - 为什么带有类型参数的重载方法的 Scala 隐式解析失败?

c++ - 使用 boost.python 导出 C++ 多态函数的聪明方法

r - 建筑 R : --with-libtiff not enabling TIFF capability

string - 如何将整数转换为字符串?

haskell - 为什么类型系统拒绝我看似有效的程序?