Изменения

R:Профилирование кода

50 байтов добавлено, 11:28, 14 февраля 2014
м
Нет описания правки
{{CC-BY-4.0|author=автором Артём Клевцов}}
== Пакет <code>base </code> ==
Описанные выше функции <code>system.time()</code>, <code>benchmark()</code>, <code>microbenchmark()</code> позволяют оценить общее время выполнения выражения и нивелировать возможные вариации за счет множества попыток, однако для более полной оценки и определения стратегии оптимизации кода необходимо также выявлять и «узкие» места в выполняемом коде. К подобным «узким» местам можно отнести те вызовы, которые занимают наибольшее количество времени или расходуют больше всего памяти (при профилирования расхода памяти). Существуют специальные пакеты, предназначенные для организации профилирования или для более наглядной демонстрации результатов, однако далее пойдет речь о функции <code>Rprof()</code> из пакета <code>base</code>.
</syntaxhighlight>
== Пакет <code>proftools </code> ==
Также может оказаться полезной функция <code>flatProfile()</code> из пакета <code>proftools</code>. Данная функция выводит таблицу, сходную с таблицей «by.total» возвращаемую функцией <code>summaryRprof()</code>, в одну и сортирует их по общему времени выполнения в процентах или по времени выполнения функции в процентах, если указать <code>byTotal = FALSE</code>:
Функция интересна тем, что предоставляет более компактный вывод при той же информативности, что и функция <code>summaryRprof()</code>.
== Пакет <code>profr </code> ==
Пакет <code>profr</code> предоставляет несколько функций для упрощения процесса профилирования, а также позволяет графически представить результаты профилирования. Результаты работы функции <code>profr</code> представляют собой таблицу, с хронологическим перечислением вызовов. Поэтому при использовании данной функции необходимо использовать однократное выполнение выражения. Вышеприведённый листинг по профилированию работы функции <code>desc()</code> будет выглядеть следующим образом:
[[Файл:Profr-ggplot-desc.png|600px|center]]
== Функция <code>proftable() </code> ==
Рассмотрим ещё один способ представления результатов профилирования --- функция <code>proftable()</code>, написанная Noam Ross. Исходный код данной функции доступен под лицензией GNU GPL v2 и размещён в открытом доступе на [https://github.com/noamross/noamtools/blob/master/R/proftable.R github].