14

如何在 Rcpp a 中调整大小NumericVector

当我为此使用该push_back功能时,程序会变慢。但是没有.resize()or.reserve()功能。(当我已经有了NumericVector所需大小的 a 时,我可以使用复制构造函数来获得 . 的正确大小NumericVector。在这种情况下,这比使用 快得多push_back

4

1 回答 1

19

如果您更喜欢 C++ 习惯用法,std::vector<double>请在最后使用并返回它,它将通过隐式转换wrap()为 R 向量。您还可以通过 RcppArmadillo 和 RcppEigen 使用 Armadillo 或 Eigen 向量。

我们的对象是 R 对象的浅层包装器,以此类推push_back,aRcp::NumericVector总是需要完整的副本。这是已知的并记录在案的。

编辑:所以为了完整起见,这里是一个使用 RcppArmadillo 的例子:

// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>

// [[Rcpp::export]]
arma::vec shrink(arma::vec x) {
    arma::vec y = x;
    y.resize( y.size()-2 );
    return y;
}

我们可以通过

R> Rcpp::sourceCpp('/tmp/vec.cpp')
R> shrink(1:10)
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
[5,]    5
[6,]    6
[7,]    7
[8,]    8
R> 
于 2012-12-08T23:28:16.093 回答