如何调整NumericVector的大小?

Flo*_*iry 12 r rcpp

我怎样才能在Rcpp中调整大小NumericVector

当我使用此push_back功能时,程序会变慢.但没有.resize().reserve()功能.(当我已经有一个NumericVector所需的大小时,我可以使用copy-constructor来获得正确的大小NumericVector.这种情况比使用时快得多push_back)

Dir*_*tel 19

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

我们的对象是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;
}
Run Code Online (Sandbox Code Playgroud)

我们可以通过它部署

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> 
Run Code Online (Sandbox Code Playgroud)