Rcpp a でサイズを変更するにはどうすればよいNumericVector
ですか?
この関数を使用するpush_back
と、プログラムの速度が低下します。.resize()
しかし、または.reserve()
関数はありません。(目的のサイズの が既にある場合NumericVector
は、コピー コンストラクターを使用して の正しいサイズを取得できますNumericVector
。このような場合、 を使用するよりもはるかに高速ですpush_back
)
C++ のイディオムを好む場合は、暗黙的に R ベクトルにstd::vector<double>
変換される最後にそれを使用して返します。wrap()
RcppArmadillo および RcppEigen を介して Armadillo または Eigen ベクトルを使用することもできます。
私たちのオブジェクトは R オブジェクトの浅いラッパーなのでpush_back
、たとえば a は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>