【问题标题】:How do you convert a vector of vectors containing doubles in C++ to a matrix in R using the Rcpp library?如何使用 Rcpp 库将 C++ 中包含双精度的向量向量转换为 R 中的矩阵?
【发布时间】:2016-06-21 17:28:20
【问题描述】:

我正在使用 Rcpp 库将 C++ 中包含双精度的向量向量转换为 R 中的矩阵。我本质上想调用此函数并让它在 R 中返回一个矩阵给我。但是,在这两种方法中,控制台打印“错误:向量”。

我的第一个转换方法是使用 wrap 函数:

// [[Rcpp::export]]
Rcpp::NumericMatrix returnRetrieval(string fileName){
//bm.real_psi is a globally declared vector of vectors
return Rcpp::wrap(bm.real_psi);
}

我的第二种方法是创建一个新矩阵并将其返回给 R 代码。

//also tried this and same error occured
Rcpp::NumericMatrix createMatrix(vector< vector <double> > input){
  Rcpp::NumericMatrix storeContainer(input.size(), input[0].size());
  for(int i = 0; i < input.size(); i++){
    for(int j = 0; j <input[0].size(); j++){
      storeContainer(i, j) = input[i][j];
    }
  }
  return storeContainer;
}

这有点令人沮丧,所以如果有人能提供帮助,将不胜感激!谢谢:)

【问题讨论】:

    标签: c++ r matrix vector rcpp


    【解决方案1】:

    IIRC,这就是我过去实现这一目标的方式(尽管我使用 IntegerMatrix 做到了):

    NumericMatrix res(input[0].size(),input.size());
    double* resp = REAL(res);
    for (size_t ci = 0; ci < res.ncol(); ++ci)
        std::copy(input[ci].begin(),input[ci].end(),resp+ci*res.nrow());
    return res;
    

    std::copy() 应该是最大效率的,我认为。

    【讨论】:

    • “NUMERIC(res)”是什么意思?我的控制台上出现了与此相关的错误。
    • @AdiSidapara 抱歉,我使用了错误的宏。应该是REAL()。该宏检索指向底层矢量数据的原始指针。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2022-11-12
    相关资源
    最近更新 更多