Эффективно организуем работу в R
Elena UСегодня хочу рассказать небольшие тонкости для качественной организации работы с R в IDE RStudio.
Организация проектов в RStudio
Первым делом, что нужно освоить для эффективной работы - это перестать использовать setwd("C:\Users\username\path\that\only\I\have")
, а также не использовать абсолютные пути для доступа к файлам.
Скажу честно, что еще совсем недавно я использовала абсолютные пути и не видела в этом большого вреда, поскольку работаю преимущественно в одиночку и на одном устройстве. Однако все равно периодически приходилось переписывать пути вручную и это было неудобно. А потом я прочитала статью Дженни Брайан (Jenny Bryan) о желании сжечь компьютер злодеям, которые так делают, и теперь привыкаю следовать правильному подходу - использовать R-проекты для организации доступа к файлам.
Настоятельно рекомендую самостоятельно почитать эту статью, поскольку ниже я привожу краткую выжимку, где подчеркнула определенные вещи, а за деталями лучше обратиться к оригиналу.
Как организовать R-проекты (еще можно почитать в книге Хэдли Викхама)
- Заходим в File - New Project
2. В зависимости от того, с нуля создается проект или вы хотите перейти на проект-ориентированный подход для существующих данных выбираем новую директорию или существующую
3. Допустим я выбрала новую директорию, далее выбираем New Project ->
Пишем название проекта и директорию (папку), в которой он будет располагаться. Также я ставлю галочку для открытия в новой сессии RStudio чтобы сохранить наработки предыдущих проектов. В результате открывается чистая студия, где рабочая директория будет соответствовать нужному пути. А в созданной директории появился .RProj файл. Теперь при закрытии окна арстудио можно будет открыть этот файл и все будет в том виде, в котором вы его оставили (с открытыми скриптами, даже несохраненными и с созданными переменными, только это нужно отключить, подробнее ниже).
Если же создавать проект в существующей директории, то это еще проще, просто выбираем нужный путь к ней и открываем проект, можно также в новой сессии.
4. Рекомендуется организовать данные в проекте определенным одинаковым образом для удобства работы. Например, создать отдельную директорию data для данных, можно создать дополнительные папки для сырых и процессированных данных, а еще создать отдельную директорию для рисунков. Подробнее можно почитать в книге Ивана Позднякова, которому отдельное спасибо за дискуссии в твиттере и выявление антипаттернов!
5. Еще рекомендуется использовать пакет here для универсального доступа к файлам вне зависимости от используемой системы (Windows/Linux/Mac) и текущей директории.
Почитать о преимуществах можно здесь и в документации к пакету.
6. Ну и последняя по порядку, но не по значению рекомендация в этой части. Хочу поделиться замечательным руководством Дженни Брайан о правильном именовании файлов для удобной работы, это относится вообще ко всему, не только с точки зрения программирования https://speakerdeck.com/jennybc/how-to-name-files
Далее про второй страшный антипаттерн, который тоже может вызвать желание сжечь ваш компьютер)
Что не так с rm(list = ls()) в начале каждого скрипта?
Второй антипаттерн, которым я тоже страдала совсем недавно, это привычка писать в начале скрипта rm(list = ls())
для удаления всех переменных.
Мне казалось, что это классно придумано, ведь при запуске скрипта я удаляю старые переменные в одну строчку, не надо руками нажимать на метелку в окружении переменных и нет риска запутаться со старыми переменными.
Однако, с таким подходом я иногда забывала эксплицитно подгрузить часть пакетов (через library
), потому что они были загружены ранее при выполнении других скриптов. В результате скрипт оказывается невоспроизводимым, особенно нехорошо, если понадобится делиться скриптом с коллегами.
Все это можно легко решить, сделав несколько настроек в RStudio: Tools -> Global Options -> General - убираем галочку с восстановления .RData при запуске студии и выбираем никогда не сохранять .RData при выходе.
Итак, вместо того чтобы удалять переменные в начале нового скрипта, лучше воспользоваться сочетанием горячих клавиш Ctrl/Cmd+Shift+F10. Таким образом мы полностью перезапустим сессию, естественно удалив старые переменные, а также проверим, что не забыли загрузить нужные пакеты в начале скрипта.
Кроме того, полезно перезапускать сессию таким сочетанием клавиш в процессе работы, чтобы убедиться, что все нужные переменные созданы в рамках скрипта, а не где-то когда-то были подсчитаны в консоли и висят в окружении, что опять-таки вызовет проблемы с воспроизводимостью при запуске вашего скрипта с нуля.
И еще немного рекомендаций для улучшения стиля написания кода
Почитать рекомендации можно от самого Хэдли Викхама http://adv-r.had.co.nz/Style.html, правда здесь немного.
- В R для именования переменных принят snake_case, то есть рекомендуется использовать в качестве разделителя нижнее подчеркивание (а не например заглавные буквы - camelCase и не точки). Но конечно же camelCase не запрещен к использованию, главное правило - оставаться последовательным, то есть если решили использовать camelCase, то так и делать на протяжении всего проекта. Почитать детальнее можно здесь и здесь: это главы из книги Хэдли Викхама R for Data Science.
- Не стоит использовать сокращения T и F от TRUE и FALSE, поскольку полные наименования R защищает от переписывания, а вот сокращения нет и можно попасть в глупую ситуацию, создав в какой-то момент переменную T или F.
- Лучше использовать в качестве оператора присваивания
<-
, а не=
Если что, стрелочку можно вставить с помощью хоткея Alt+- (альт минус) в RStudio. Правоприсвоение (2 -> a
) не рекомендуется, так как снижает читаемость кода. - Еще мне понравилось, что в новых версиях RStudio можно сделать скобки разноцветными, чтобы облегчить восприятие вложенного кода (хотя сильной вложенности кода стоит по возможности избегать). Чтобы это сделать, нужно зайти в Tools - Global Options - Code - Display и поставить галочку здесь:
- Совет новичкам (и не только новичкам) как наиболее эффективно просить помощи с кодом у коллег.
Как минимум скидывать код и скриншот ошибки (не фото на телефон экрана!), чтобы не было просто: "АААА у меня ничего не работает".
В идеале готовить воспроизводимые примеры ошибки, например с помощью пакетаreprex
. В книге Викхама Mastering Shiny можно почитать, как это работает, расписано с точки зрения отладки Shiny app, но на самом деле это работает для любых трудностей в коде. - Полезные хоткеи при работе в RStudio (для пользователей Mac OS Ctrl = Cmd):
*Alt + -
(Альт минус) чтобы вставить оператор присваивания
*Ctrl/Cmd+Enter
для запуска строчки кода (можно выделять несколько строк и запускать их)
*Ctrl+Shift+C
для быстрого комментирования и раскомментирования строчки кода
*Ctrl+Shift+M
для вставки пайпа%>%
*Ctrl+Shift+Enter
для запуска скрипта целиком
*Ctrl+Shift+F10
для перезапуска арстудии. Полезно в сочетании с предыдущей командой для проверки, что все в скрипте хорошо работает
* Напоминаю, что можно пользоваться табом для автодополнения названий переменных и функций
* Также напоминаю, что в консоли с помощью стрелки вверх можно вызвать предыдущие команды - С полным списком хоткеев можно ознакомиться в Tools - Keyboard Shortcuts Help или лично мне удобнее их смотреть в Tools - Modify Keyboard Shortcuts
Полезные материалы и ссылки
- Много раз упомянутая статья Дженни Брайан, еще раз настоятельно рекомендую почитать https://www.tidyverse.org/blog/2017/12/workflow-vs-script/
- Книга https://rstats.wtf/ авторов Jennifer Bryan и Jim Hester. Тоже советую ознакомиться, хотя целиком я ее сама не прочитала. Здесь собраны как советы новичкам, так и советы для продвинутых юзеров, например как правильном искать ошибки в R (не только дебаг принтом)).
- Презентация Дженни Брайан https://speakerdeck.com/jennybc/how-to-name-files о правильном именовании файлов.
- Организация работы с Git https://happygitwithr.com/ угадайте чьего авторства
- В книге Хэдли Викхама R for Data Science https://r4ds.had.co.nz/index.html собраны рекомендации по организации рабочего процесса (главы Workflow), полезно почитать, возможно есть какие-то хитрости, которые помогут вам повысить читаемость кода и удобство написания.
- Книга Ивана Позднякова https://pozdniakov.github.io/tidy_stats/
"Анализ данных и статистика в R". Узнала про книгу после курса Бластима, очень классно, всем советую + на русском языке.