How to resize a NumericVector?

前端 未结 1 1547
清歌不尽
清歌不尽 2021-02-07 20:16

How can I resize in Rcpp a NumericVector?

When I use the push_back function for this, the Program slows down. But there are no .resize()<

相关标签:
1条回答
  • 2021-02-07 20:50

    If you prefer the C++ idioms, use std::vector<double> and return that at the end where it will be converted via an implicit wrap() to an R vector. You could also use Armadillo or Eigen vectors via RcppArmadillo and RcppEigen.

    Our objects are shallow wrappers around the R object, so push_back on, say, a Rcp::NumericVector always needs a full copy. That is known and documented.

    Edit: So for completeness, here is an example using 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;
    }
    

    which we can deploy via

    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> 
    
    0 讨论(0)
提交回复
热议问题