如何在NumericVector
?
当我使用push_back
函数时,程序会变慢。但是没有.resize()
或.reserve()
函数。
(当我已经有一个具有所需大小的NumericVector
时,我可以使用copy-constructor来获得NumericVector
的正确大小。在这种情况下,这比使用{{1}要快得多}})
答案 0 :(得分:19)
如果您更喜欢C ++习惯用法,请使用std::vector<double>
并将其返回到通过隐式wrap()
转换为R向量的末尾。你也可以通过RcppArmadillo和RcppEigen使用Armadillo或Eigen向量。
我们的对象是R对象周围的浅层包装器,因此push_back
on 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>