4

假设一个用途NumericVector和另一个用途vector<double>在他们的 Rcpp 代码中。这两种用法之间是否存在显着差异,尤其是在性能方面?

4

1 回答 1

10

一般来说,是的。

所有的 Rcpp(11) 类型都是围绕底层对象的“瘦代理对象”(我们在几个地方、演讲、幻灯片、我的书……)SEXP。这意味着当您从 R 转到 C++ 时,以及从 C++ 回到 R 时,不会进行任何复制。

但是,使用标准 C++ 类型(如std::vector<T>)通常需要一个副本。

所以你应该很容易看到一些微不足道的测试脚本的差异,因为N增加得足够多。

就个人而言,我通常喜欢“干净”地使用 C++/STL 类型来处理“感觉更像 C++”但仍然意识到性能损失的代码。通常这并不重要,因为 C++ 解决方案比您在纯 R 解决方案中替换的更快。

但你的问题是,如果一个人支配另一个人,另一个人是肯定的。

于 2014-11-20T04:34:46.290 回答