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

根据我从C++中所知道的,与R不同,C++中的所有变量都应该预先声明,并且这个声明包括类型和大小。例如当我们说:

arma::vec test(2);

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

这是我的挑战:

在我的代码中,我有一个循环,将不同大小(通常大于2)的向量分配给"测试向量" 没有 测试的重新声明。令我惊讶的是,代码工作得很好,没有任何编译错误!

在每次迭代中,以下是我如何分配一个新的向量来测试:

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

问题:

这是一个犰狳特征,我们可以分配不同长度的向量来测试它最初被声明为大小为2?或者它是一个Rcpp包功能?

非常感谢你的帮助。

有帮助吗?

解决方案

你要求矢量的大小被编码到 类型.当你指定某个东西是类型的时候 arma::vec, ,你允许它接受 arma::vec任何大小的s。

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

你必须修改你的 as 打电话给我相信-希望它有效,我没有测试过。

你应该阅读 犰狳文档;犰狳文档可能是最干净和最有用的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top