3482
правки
Изменения
м
→Пакет base
Принцип работы функции {{Inline-code|Rprof()|lang="rsplus"}} таков: с заданным интервалом (аргумент {{Inline-code|interval|lang="rsplus"}}) делаются «снимки» вызовов и записываются в файл. Следует помнить о том, что {{Inline-code|Rprof()|lang="rsplus"}} делает «снимки» каждые 0.02 секунды (значение по умолчанию), поэтому если выражение выполняется быстрее, то {{Inline-code|Rprof()|lang="rsplus"}} не сможет его отследить. В таком случае периодичность «снимков» можно задать вручную с помощью аргумента {{Inline-code|interval|lang="rsplus"}}. Также можно увеличить объём данных, чтобы код выполнялся дольше.
Ещё одной специфической особенностью профилирования является то, что при профилирования записываются абсолютно все вызовы. Например, если вы используется функцию {{Inline-code|replicate()|lang="rsplus"}} для организации повторных выполнений повторного выполнения выражения, то вызовы {{Inline-code|replicate()|lang="rsplus"}} также будут записаны в лог, что может затруднить его анализ.Аналогичная ситуация будет происходить при вызове скрипта через функцию {{Inline-code|source()|lang="rsplus"}}
Обратим внимание, что при профилировании мы можем использовать многократное выполнение анализируемой функции для сбора более надёжной статистики вызовов.
В качестве примера ниже представлены шаги процесса профилирования функции, которая рассчитывает первичные описательные статистики (среднее, медиану, стандартное отклонение, минимум и максимум) по сгенерированным $<math>10^6$ </math> нормально распределённым значениям. <syntaxhighlight lang="rsplus">> x <- rnorm(10^6)</syntaxhighlight> Объявим данную функцию:
<syntaxhighlight lang="rsplus">
<syntaxhighlight lang="rsplus">
> tmp.log <- tempfile(pattern = "prof-", fileext = ".log")
</syntaxhighlight>
<syntaxhighlight lang="rsplus">
# Включаем профилирование
> Rprof(tmp.log)
# Выполняем код
> for (i in seq_len(100))+ invisible(desc(nvecx))
# отключаем профилирование
> Rprof(NULL)
</syntaxhighlight>
<syntaxhighlight lang="rsplus">
> summaryRprof(tmp.log)
</syntaxhighlight>
<syntaxhighlight lang="rsplus">
> unlink(tmp.log)
</syntaxhighlight>
<syntaxhighlight lang="rsplus">
> summaryRprof(tmp.log)print(sumprof.desc)
</syntaxhighlight>
<syntaxhighlight lang="rsplus">
> Rprof(tmp.log, line.profiling = TRUE)> source("/path/scritpt.R")> Rprof(NULL)> summaryRprof(tmp.log)> unlink(tmp.log)
</syntaxhighlight>