Эффективный и рекурсивный способ навигации по коду R в Rstudio?

Я использую RStudio.

Я начинаю чувствовать необходимость пройти через код пакетов, чтобы глубже понять или взломать определенные функции. Когда я пытаюсь перемещаться с помощью используя Ctrl+щелчок мышью для определенных функций внутри пакетов код отображается в специальном средстве просмотра исходного кода.

Проблема этого взгляда

  1. Он доступен только для чтения (почему?). Вы не можете просмотреть код функций, вызываемых и определяемых в другом месте. Я знаю другую IDE (для других языков), где мы можем рекурсивно просматривать код в режиме только для чтения.
  2. Для универсальной функции у нас есть только строка UseMethod без кода.

Мое решение состояло в том, чтобы загрузить пакет (источник кода) и просмотреть код, используя параметр «Найти в файлах».

У вас есть более эффективный способ пройти код соответственно? Я открыт для предложений: другая IDE? Винда/Юникс? сетевое решение: как вы думаете, можно ли установить серверную версию Rstudio в облаке, чтобы пройти весь пакет R без загрузки?

PS: Мой вопрос в основном о том, чтобы пройти через код, а не взломать его.


person agstudy    schedule 03.12.2012    source источник
comment
Использование traceback() для проверки того, какие функции были фактически вызваны из универсальной функции, может помочь вам с номером 2.   -  person Marius    schedule 03.12.2012
comment
Я просто просматриваю исходный код в своем любимом текстовом браузере. Исходный код пакета доступен в CRAN (и в других местах), а доступ к R можно получить из размера R-проекта. Если я хочу изменить функцию, я создаю новый файл .R, копирую/вставляю функцию, изменяю ее и получаю исходный код. Это сохраняет порядок, и, вероятно, поэтому RStudio не позволяет редактировать исходный код функций на лету.   -  person Roman Luštrik    schedule 03.12.2012
comment
@RomanLuštrik Я полностью согласен. Что, если для одного проекта требуется хак x, а для другого — y, конфликтуют они или нет?   -  person Paul Hiemstra    schedule 03.12.2012
comment
Честно говоря, я бы рекомендовал не взламывать существующие пакеты по уже указанным причинам, а также по тому факту, что (большинство) пакетов были довольно тщательно сконструированы. Если вам нужно какое-то улучшение, лучше всего написать функцию-оболочку. Во-вторых, лучше всего написать сопровождающему пакету и запросить улучшение :-).   -  person Carl Witthoft    schedule 03.12.2012
comment
@PaulHiemstra, вы можете написать собственную функцию для каждого проекта. Я подозреваю, что это будет редко, и в конечном итоге последнее предложение Карла Витхофта будет лучшим. :)   -  person Roman Luštrik    schedule 05.12.2012
comment
Похоже на то, что лучше спросить у ребят из RStudio...   -  person nico    schedule 26.12.2012
comment
Для проблемы 1: F2 (альтернатива Ctrl + щелчок) успешно входит в (только для чтения) источник функций рекурсивно. Однако вместо того, чтобы открывать исходный код функции на новой вкладке, как это происходит с исходным кодом функции на первом уровне, он показывает исходный код на той же вкладке. Затем вы можете снова перейти вверх, используя кнопку «Назад» (чуть выше панели исходного кода) или нажав Ctrl + F9 (громоздкий ярлык, я знаю).   -  person jbaums    schedule 25.01.2013
comment
@jbaums верно. почему бы не превратить ваш комментарий в хороший ответ?   -  person agstudy    schedule 28.01.2013
comment
Я использую тот же метод, что и @RomanLuštrik, для настройки существующих пакетов. Я загружаю все соответствующие пакеты в Notepad++ и использую параметр поиска «Найти все во всех открытых документах». Я знаю других, которые пытаются сделать это с помощью Eclipse, но все зависит от предпочтений.   -  person Dinre    schedule 28.01.2013
comment
@Dinre спасибо .. но вопрос о RStudio ..   -  person agstudy    schedule 28.01.2013


Ответы (2)


Обычно я считаю, что github — лучший способ покопаться в пакетах (для тех, кто там размещен). Хотя это далеко не идеальное решение, оно часто также включает в себя тесты и ссылки на дополнительную документацию, которые вы не всегда найдете со стандартным «?». Этот подход, как правило, наиболее полезен, если вам нужно по-настоящему изучить пакет, а не просто понять плохо документированную сигнатуру. Смазка Хэдли Уикхема — это пакет, в котором этот подход окупился для меня. Кроме того, я обнаружил, что лучше понимаю качество кода, изучая тесты и вспомогательные файлы.

person Ed Fine    schedule 10.04.2013
comment
+1! Благодарность! Я также использую github-технику. Но ориентироваться в определении функции непросто. Я думаю, что лучшее решение — иметь удаленную IDE (что-то вроде Rstudio Server), которая подключена к Github (или любому другому репозиторию R), чтобы получить доступ ко всем пакетам R. - person agstudy; 20.04.2013

Наведите курсор на функцию и нажмите «F2». Это эквивалентно «F3» Eclipse.

person Alberto Contador    schedule 07.03.2014
comment
Добро пожаловать в СО. Здорово, что вы здесь под тегом R :) F2 удобен для проверки кода, но не работает с методом S3 и кодом внутренней функции. Вы можете увидеть комментарий jbaums под моим вопросом, он говорит то же самое с более подробной информацией. - person agstudy; 07.03.2014