Я бы очень хотел использовать профилировщик линии. Это существует в Matlab и Python и очень полезно для поиска битов кода, которые занимают много времени или выполняются больше (или меньше), чем ожидалось. Многие из моих кодов включают в себя оптимизацию функций и сколько раз что-то итерации могут быть неизвестны заранее (хотя большинство итераций ограничены или указаны).
Стек вызовов полезен, если весь ваш код находится в R и очень прост, но как I recently posted about it, он требует много усилий, если ваш код является сложным.
Достаточно просто разработать профилировщик строк для заданного бита кода. Наивный способ - индексировать каждую строку (или только предварительно определенные разделы) и вставлять вызов в журнал proc.time()
этой строки. В цикле я просто перечисляю разделы кода и сохраняю в двумерном списке значения proc.time
для раздела i
на итерации k
. [См. Обновление ниже: на самом деле это не способ сделать профилировщик строк для всех видов кода.]
Можно использовать такой инструмент для поиска горячих точек, аномалий (например, код, который должен быть O (n), но на самом деле O (n^2)), код, который может извлечь выгоду из memoization (профилировщик строк не говорит вам об этом, но он позволяет вам знать, где искать), код, который ошибочно находится внутри цикла, и многое другое.
Обновление 1: Вставка линии синхронизации между каждой функциональной строкой немного ошибочна: определение строки кода не просто кода, разделенного пробелом. Возможность анализа кода в АСТ необходима для того, чтобы знать, где начинаются и заканчиваются операции.Как было сказано в некоторых ответах на this question, есть несколько инструментов (а именно showTree
и walkCode
в пакете codetools
) для этого. Простое применение регулярного выражения к исходному коду было бы очень плохим делом.
Восстановление операционной системы в R, а? –
Является ли моя фамилия Кампос? Дирк, мы все знаем, что если вы собираетесь перестроить операционную систему, сначала вы должны разработать свой собственный язык (желательно из сборки), а затем построить его с помощью собственного синтаксиса. – Shane
Я думаю, что у меня есть экзистенциальная проблема с этим вопросом. Пакет R, который не существует, не может быть полезен. – Nosredna