Есть ли разница в производительности между NumericVector и vector<double>?
Предположим, кто-то использует NumericVector
а другой использует vector<double>
в их коде Rcpp. Есть ли заметная разница между двумя способами, особенно в производительности?
1 ответ
Вообще-то да.
Все типы Rcpp(11) являются "тонкими прокси-объектами" (о которых мы говорим в нескольких местах: разговоры, слайды, моя книга, ...) вокруг нижележащего SEXP
объекты. Это означает, что при переходе с R на C++ и при переходе с C++ на R. копии не создаются.
Использование стандартных типов C++, таких как std::vector<T>
Однако, как правило, требуется копия.
Таким образом, вы должны легко увидеть разницу в каком-то тривиальном тестовом скрипте как N
увеличивается достаточно.
Лично мне вообще нравится "чистое" использование типов C++ / STL для кода, который "чувствует больше C++- иш", но при этом осознает снижение производительности. Часто это не имеет большого значения, так как решение C++ быстрее, чем то, что вы заменяете в чистом R-решении.
Но твой вопрос, если один доминирует над другим, а другой ясно, да.