如何在Rcpp和NumericVector
中调整大小?
当我为此使用push_back
函数时,程序速度变慢。但是没有.resize()
或.reserve()
函数。
(当我已经具有所需大小的NumericVector
时,可以使用copy-constructor获取正确的NumericVector
大小。在这种情况下,这比使用push_back
的速度要快得多)
最佳答案
如果您更喜欢C ++习惯用法,请使用std::vector<double>
并将其返回到将通过隐式wrap()
将其转换为R向量的末尾。您也可以通过RcppArmadillo和RcppEigen使用Armadillo或本征向量。
我们的对象是围绕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;
}
我们可以通过部署
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>
关于r - 如何调整NumericVector的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13782943/