R полон полезного. Вот несколько вещей, которые я часто использую, о которых другие могут не знать.

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

Поскольку экосистема R настолько богата и постоянно растет, люди часто упускают возможность узнать о чем-то, что действительно может помочь им в выполнении задачи, которую они должны выполнить. Так что я часто получаю удивленную реакцию от моей аудитории: «Я никогда не знал об этом!».

Вот десять вещей, которые облегчают мою жизнь, работая в R. Если вы уже знаете их все, извините за потраченное время на чтение, и, пожалуйста, подумайте о добавлении комментария с чем-то еще, что вы сочтете полезным для других читателей.

1. Функция switch

Я ЛЮБЛЮ switch(). По сути, это удобное сокращение оператора if, который выбирает его значение в соответствии со значением другой переменной. Я нахожу это особенно полезным, когда пишу код, который должен загружать другой набор данных в соответствии с вашим предыдущим выбором. Например, если у вас есть переменная с именем animal и вы хотите загрузить другой набор данных в зависимости от того, является ли animal собакой, кошкой или кроликом, вы можете написать следующее:

data <- read.csv(
  switch(animal, 
         "dog" = "dogdata.csv", 
         "cat" = "catdata.csv",
         "rabbit" = "rabbitdata.csv")
)

Это особенно полезно в приложениях Shiny, где вы можете захотеть загрузить разные наборы данных или даже файлы среды в зависимости от одного или нескольких вариантов меню ввода.

2. Сочетания клавиш RStudio

Это не столько R-хак, сколько RStudio IDE, но сочетания клавиш, доступные для общих команд, очень полезны и могут сэкономить много времени на набор текста. Два моих любимых - Ctrl + Shift + M для оператора вертикальной черты %>% и Alt + - для оператора присваивания<-. Если вы хотите увидеть полный набор этих замечательных сочетаний клавиш, просто введите Atl + Shift + K в RStudio.

3. Пакет flexdashboard

Если вы хотите быстро настроить и запустить Shiny с минимумом хлопот, в пакете flexdashboard есть все, что вам нужно. Он предоставляет простые ярлыки HTML, которые позволяют легко создавать боковые панели и организовывать отображение в строки и столбцы. Он также имеет сверхгибкую строку заголовка, где вы можете организовать свое приложение на разных страницах и вставить значки и ссылки на код Github, адрес электронной почты или что-то еще. Как пакет, который работает в RMarkdown, он также позволяет вам хранить все ваше приложение в одном Rmd файле, а не разбивать его на отдельные файлы сервера и пользовательского интерфейса, например shinydashboard. Я использую flexdashboard всякий раз, когда мне нужно создать простую версию прототипа приборной панели, прежде чем переходить к более продвинутому дизайну. Я часто могу запустить информационные панели в течение часа, используя flexdashboard.

4. Функции req и validate в R Shiny

Разработка R Shiny может разочаровывать, особенно когда вы получаете общие сообщения об ошибках, которые не помогают понять, что происходит внутри. По мере развития Shiny добавляется все больше и больше функций проверки и тестирования, чтобы помочь лучше диагностировать и предупреждать при возникновении конкретных ошибок. Функция req() позволяет предотвратить выполнение действия, если в среде не присутствует другая переменная, но делает это тихо и без отображения ошибки. Таким образом, вы можете сделать отображение элементов пользовательского интерфейса зависимым от предыдущих действий. Например, со ссылкой на мой пример № 1 выше:

output$go_button <- shiny::renderUI({
  # only display button if an animal input has been chosen
  
  shiny::req(input$animal)
  # display button
  shiny::actionButton("go", 
                      paste("Conduct", input$animal, "analysis!") 
  )
})

validate() проверяет перед рендерингом вывода и позволяет вам возвращать индивидуализированное сообщение об ошибке, если определенное условие не будет выполнено, например, если пользователь загрузил неправильный файл:

# get csv input file
inFile <- input$file1
data <- inFile$datapath
# render table only if it is dogs
shiny::renderTable({
  # check that it is the dog file, not cats or rabbits
  shiny::validate(
    need("Dog Name" %in% colnames(data)),
    "Dog Name column not found - did you load the right file?"
  )
  data
})

Подробнее об этих функциях читайте в другой моей статье здесь.

5. Скрытие учетных данных с помощью .Renviron

Если вы делитесь кодом, который требует учетных данных для входа в базы данных и т.п., вы можете использовать файл .Reviron, чтобы избежать публикации этих учетных данных в Github или других местах, где они могут быть подвержены риску. .Renviron - это файл, в котором можно хранить важные переменные среды, и его легко редактировать с помощью функции edit_r_environ() внутри пакета usethis. В качестве примера вы можете установить псевдоним для учетных данных удаленной базы данных в .Renviron, например:

  DSN = "database_name",
  UID = "User ID",
  PASS = "Password"

Затем в вашем общем сценарии вы можете вызвать эти переменные. Например:

db <- DBI::dbConnect(
  drv = odbc::odbc(),
  dsn = Sys.getenv("DSN"),
  uid = Sys.getenv("UID"),
  pwd = Sys.getenv("PASS")
)

6. Автоматизируйте укладку тидиверса с помощью стайлера.

Это был тяжелый день, у вас было много дел. Ваш код не такой аккуратный, как вам хотелось бы, и у вас нет времени на его редактирование. Не бойся. stylerpackage имеет множество функций, позволяющих автоматически изменять стиль вашего кода в соответствии со стилем tidyverse. Достаточно просто запустить styler::style_file() свой беспорядочный скрипт, и он сделает большую часть работы (хотя и не всю) за вас.

7. Параметризация документов R Markdown

Итак, вы пишете прекрасный документ R Markdown, в котором проанализировали множество фактов о собаках. А потом вам говорят: «Нет, меня больше интересуют кошки». Не бойся. Вы можете автоматизировать аналогичный отчет о кошках всего одной командой, если параметризуете свой документ с уценкой R.

Вы можете сделать это, определив параметры в заголовке YAML вашего документа R Markdown и присвоив каждому параметру значение. Например:

---
title: "Animal Analysis"
author: "Keith McNulty"
date: "21 March 2019"
output:
  html_document:
    code_folding: "hide"
params:
  animal_name:
    value: Dog
    choices:
      - Dog
      - Cat
      - Rabbit
  years_of_study:
    input: slider
    min: 2000
    max: 2019
    step: 1
    round: 1
    sep: ''
    value: [2010, 2017]
---

Теперь вы можете записать эти переменные в код R в вашем документе как params$animal_name и params$years_of_study. Если вы вяжете свой документ как обычно, он будет вязаться со значениями этих параметров по умолчанию в соответствии с переменной value. Однако, если вы вяжете с параметрами, выбрав эту опцию в выпадающем списке RStudio Knit (или используя knit_with_parameters()), появится прекрасный вариант меню, в котором вы сможете выбрать свои параметры перед тем, как вязать документ. Потрясающие!

8. Showjs

revealjs - это пакет, который позволяет создавать красивые презентации в HTML с интуитивно понятным меню навигации по слайдам со встроенным кодом R. Его можно использовать внутри R Markdown, и он имеет очень интуитивно понятные ярлыки HTML, позволяющие создавать вложенную логическую структуру красивых слайдов с различными вариантами стилей. Тот факт, что презентация находится в формате HTML, означает, что люди могут следить за вашими выступлениями на своих планшетах или телефонах, что очень удобно. Вы можете настроить revealjspresentation, установив пакет и затем вызвав его в заголовке YAML. Вот пример YAML-заголовка выступления, которое я недавно прочитал, используя revealjs

---
title: "Exporing the Edge of the People Analytics Universe"
author: "Keith McNulty"
output:
  revealjs::revealjs_presentation:
    center: yes
    template: starwars.html
    theme: black
date: "HR Analytics Meetup London - 18 March, 2019"
resource_files:
- darth.png
- deathstar.png
- hanchewy.png
- millenium.png
- r2d2-threepio.png
- starwars.html
- starwars.png
- stormtrooper.png
---

а вот пример страницы. Вы можете найти код здесь и презентацию здесь.

9. HTML-теги в R Shiny (например, воспроизведение звука в приложении Shiny).

Большинство людей не в полной мере используют HTML-теги, доступные в R Shiny. Есть 110 тегов, которые предлагают ярлыки для различных команд форматирования HTML и других команд. Недавно я создал блестящее приложение, которое долго выполняло задачу. Зная, что пользователь, скорее всего, будет выполнять несколько задач одновременно, ожидая ее завершения, я использовал tags$audio, чтобы приложение играло в фанфары победы, чтобы предупредить пользователя о завершении задачи.

10. Пакет похвалы

Смешно простой, но в то же время потрясающий, пакет praise восхваляет пользователей. Хотя это может показаться бессмысленным самовлюблением, на самом деле это очень полезно при написании пакетов R, где вы можете похвалить или поддержать кого-то, если он что-то делает правильно, например, если процесс завершается успешно. Вы также можете просто поместить его в конец сложного сценария, чтобы дать вам дополнительный шанс счастья, когда он будет успешно работать.

Изначально я был чистым математиком, затем стал психометриком и специалистом по анализу данных. Я увлечен применением всех этих дисциплин к сложным человеческим вопросам. Я также помешан на программировании и большой поклонник японских ролевых игр. Найдите меня в LinkedIn или Twitter.