14

Rcpp a でサイズを変更するにはどうすればよいNumericVectorですか?

この関数を使用するpush_backと、プログラムの速度が低下します。.resize()しかし、または.reserve()関数はありません。(目的のサイズの が既にある場合NumericVectorは、コピー コンストラクターを使用して の正しいサイズを取得できますNumericVector。このような場合、 を使用するよりもはるかに高速ですpush_back)

4

1 に答える 1

19

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> 
于 2012-12-08T23:28:16.093 に答える