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. Автоматизируйте укладку тидиверса с помощью стайлера.
Это был тяжелый день, у вас было много дел. Ваш код не такой аккуратный, как вам хотелось бы, и у вас нет времени на его редактирование. Не бойся. styler
package имеет множество функций, позволяющих автоматически изменять стиль вашего кода в соответствии со стилем 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, означает, что люди могут следить за вашими выступлениями на своих планшетах или телефонах, что очень удобно. Вы можете настроить revealjs
presentation, установив пакет и затем вызвав его в заголовке 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.