В дополнение к функциям бенчмаркинга, есть ли какой-нибудь инструмент в R, чтобы мы могли извлечь самые большие узкие места в R-коде?
Я часто очень сильно сомневаюсь в вычислительной выгоде, которую получу при переписывании R-кодав C ++.Например, в начальной загрузке, где каждая итерация должна выполнять оптимизацию, я не знаю, полезно ли использовать библиотеку GSL для оптимизации функции логарифмического правдоподобия, поскольку optim
Языковая функция R использует файл stats.so.Я заметил, что это делает stats ::: C_optim
.
> stats:::C_optim
$name
[1] "optim"
$address
<pointer: 0x1cb34e0>
attr(,"class")
[1] "RegisteredNativeSymbol"
$dll
DLL name: stats
Filename: /usr/lib/R/library/stats/libs/stats.so
Dynamic lookup: FALSE
$numParameters
[1] 7
attr(,"class")
[1] "ExternalRoutine" "NativeSymbolInfo"
Глядя на тело функции optim
(edit(optim)
), я вижу, что есть импорт эффективных функций, реализованных в C. Например,есть:
.External2(C_optim, par, fn1, gr1, method, con, lower,
upper)
Сомнение : Для Rcpp пользователей в ваших проектах вы обычно пытаетесь реализовать все свои функции C ++ или реализовать набор небольшихФункции C ++, которые будут использоваться в функции R?
Я знаю, что это довольно общий вопрос, но все функции, которые я использую Rcpp , всегда пытаются реализовать функцию C ++ с нуля.Я чувствовал, что я программирую больше на C ++, чем на R. Я иногда думаю, что мне нужно программировать непосредственно на C ++.
R обладает многими характеристиками, которые делают язык медленным для различных задач.Я всегда стараюсь избегать петель и уступаю место использованию семейства функций apply
.Тем не менее, я часто нахожу R очень медленным.Таким образом, поскольку я очень не определился с тем, что стоит оптимизировать, я все-таки реализовал все на C ++.