如何调整NumericVector的大小?

时间:2012-12-08 23:16:00

标签: r rcpp

如何在NumericVector

中调整Rcpp的大小

当我使用push_back函数时,程序会变慢。但是没有.resize().reserve()函数。 (当我已经有一个具有所需大小的NumericVector时,我可以使用copy-constructor来获得NumericVector的正确大小。在这种情况下,这比使用{{1}要快得多}})

1 个答案:

答案 0 :(得分:19)

如果您更喜欢C ++习惯用法,请使用std::vector<double>并将其返回到通过隐式wrap()转换为R向量的末尾。你也可以通过RcppArmadillo和RcppEigen使用Armadillo或Eigen向量。

我们的对象是R对象周围的浅层包装器,因此push_back on Rcp::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>