我怎样才能在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)