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()<
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>