假设一个人使用NumericVector
而另一个人在他们的Rcpp代码中使用vector<double>
。两种用法之间是否存在显着差异,特别是在性能方面?
答案 0 :(得分:10)
一般来说,是的。
所有Rcpp(11)类型都是&#34;瘦代理对象&#34; (我们在几个地方谈论,谈话,幻灯片,我的书,......)围绕基础SEXP
对象。这意味着当你从R到C ++,以及当你从C ++回到R时,没有复制。
但是,使用标准C ++类型(如std::vector<T>
)通常需要副本。
因此,当N
增加足够的时候,你应该很容易看到一些琐碎的测试脚本的差异。
就个人而言,我一般都喜欢&#34;清洁&#34;使用C ++ / STL类型代码,感觉更多C ++ - ish&#34;但仍然意识到性能损失。通常它并不重要,因为C ++解决方案比纯R解决方案中的替换更快。
但你的问题是,如果一个支配另一个,另一个是明确的是。