我正在使用Rcpp包编写一个代码,其中主要部分用C ++编写,而R中的比例较小。
基于我从C ++中所知,所有与R不同的是,C ++中的所有变量都应该在前面声明,并且这个声明包括类型和大小。例如,当我们说:
arma::vec test(2);
然后我假设test是一个大小为2的犰狳矢量,这意味着我们不应该分配任何不同大小的测试。是吗?
这是我的挑战:
在我的代码中,我有一个循环,将不同大小(通常大于2)的向量分配给“测试向量”,而不用重新声明测试。令我惊讶的是,代码完美无缺,没有任何编译错误!
在每次迭代中,以下是我为测试分配新矢量的方法:
test = Rcpp::as<arma::vec>(myList["aVecFromMyList"]);
问题:
这是一个犰狳功能,我们可以分配不同长度的矢量来测试哪个最初被宣布为2号?或者它是一个Rcpp包功能?
非常感谢你的帮助。
答案 0 :(得分:3)
您要求将要编码的矢量大小编入类型。当您指定某些内容属于arma::vec
类型时,您可以接受任何大小的arma::vec
。
如果要在类型中强制执行大小约束,那么您需要类似arma::vec::fixed<N>
的内容,在您的情况下N
将为2.这是一种强制执行约束的类型大小为N
。对于这些的低位数版本也有typedef,例如vec2
为大小为2的固定向量。
我必须同样修改您的as
来电 - 希望它有效,我还没有对其进行测试。
你应该阅读Armadillo docs;犰狳文档可能是一些最干净,最有用的文档。