如何在Rcpp和NumericVector中调整大小?

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

最佳答案

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

我们的对象是围绕R对象的浅层包装,因此push_back上的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>

关于r - 如何调整NumericVector的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13782943/

10-15 23:16