2012-12-08 18 views
11

如何在Rcpp中調整大小?如何調整NumericVector的大小?

當我使用這個push_back功能,計劃減慢。但是沒有.resize().reserve()函數。 (當我已經與所需的大小NumericVector,我可以使用拷貝構造函數來獲取NumericVector的正確的大小。這是比push_back使用快得多這種情況下)

+0

正如德克解釋的部署,很少有機會,我們將有一個'預留'方法。我們可能會實施「調整大小」。 –

回答

17

如果你喜歡C++習慣用法,使用std::vector<double>並將其返回到它將通過隱含的wrap()轉換爲R向量的那一端。您也可以通過RcppArmadillo和RcppEigen使用Armadillo或Eigen載體。

我們的對象是圍繞R對象的淺包裝,所以push_back總是需要一個完整的副本。這是已知的和記錄。

編輯:所以對於完整,這裏是用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> 
相關問題