灵活大小的arma向量分配 - 一般是真的还是Rcpp的属性?

时间:2014-04-13 15:24:55

标签: rcpp

我正在使用Rcpp包编写一个代码,其中主要部分用C ++编写,而R中的比例较小。

基于我从C ++中所知,所有与R不同的是,C ++中的所有变量都应该在前面声明,并且这个声明包括类型和大小。例如,当我们说:

arma::vec test(2);

然后我假设test是一个大小为2的犰狳矢量,这意味着我们不应该分配任何不同大小的测试。是吗?

这是我的挑战:

在我的代码中,我有一个循环,将不同大小(通常大于2)的向量分配给“测试向量”,而不用重新声明测试。令我惊讶的是,代码完美无缺,没有任何编译错误!

在每次迭代中,以下是我为测试分配新矢量的方法:

test = Rcpp::as<arma::vec>(myList["aVecFromMyList"]);

问题

这是一个犰狳功能,我们可以分配不同长度的矢量来测试哪个最初被宣布为2号?或者它是一个Rcpp包功能?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

您要求将要编码的矢量大小编入类型。当您指定某些内容属于arma::vec类型时,您可以接受任何大小的arma::vec

如果要在类型中强制执行大小约束,那么您需要类似arma::vec::fixed<N>的内容,在您的情况下N将为2.这是一种强制执行约束的类型大小为N。对于这些的低位数版本也有typedef,例如vec2为大小为2的固定向量。

我必须同样修改您的as来电 - 希望它有效,我还没有对其进行测试。

你应该阅读Armadillo docs;犰狳文档可能是一些最干净,最有用的文档。