Эффективно организуем работу в R

Эффективно организуем работу в R

Elena U


Сегодня хочу рассказать небольшие тонкости для качественной организации работы с R в IDE RStudio.

Организация проектов в RStudio

Первым делом, что нужно освоить для эффективной работы - это перестать использовать setwd("C:\Users\username\path\that\only\I\have"), а также не использовать абсолютные пути для доступа к файлам.
Скажу честно, что еще совсем недавно я использовала абсолютные пути и не видела в этом большого вреда, поскольку работаю преимущественно в одиночку и на одном устройстве. Однако все равно периодически приходилось переписывать пути вручную и это было неудобно. А потом я прочитала статью Дженни Брайан (Jenny Bryan) о желании сжечь компьютер злодеям, которые так делают, и теперь привыкаю следовать правильному подходу - использовать R-проекты для организации доступа к файлам.

Настоятельно рекомендую самостоятельно почитать эту статью, поскольку ниже я привожу краткую выжимку, где подчеркнула определенные вещи, а за деталями лучше обратиться к оригиналу.

Как организовать R-проекты (еще можно почитать в книге Хэдли Викхама)

  1. Заходим в 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 при выходе.

Выбираем не сохранять RData при выходе и не восстанавливать ее при запуске R

Итак, вместо того чтобы удалять переменные в начале нового скрипта, лучше воспользоваться сочетанием горячих клавиш 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 и поставить галочку здесь:
Или можно сразу Code - Rainbow parentheses


  • Совет новичкам (и не только новичкам) как наиболее эффективно просить помощи с кодом у коллег.
    Как минимум скидывать код и скриншот ошибки (не фото на телефон экрана!), чтобы не было просто: "АААА у меня ничего не работает".
    В идеале готовить воспроизводимые примеры ошибки, например с помощью пакета 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". Узнала про книгу после курса Бластима, очень классно, всем советую + на русском языке.



Report Page