У R повно-повнісінько різних функцій. Нижче я наведу десять найцікавіших із них, про які багато хто міг не знати. Стаття з'явилася після того, як я виявив, що мої розповіді про деякі можливості R, які я використовую в роботі, захоплено сприймаються знайомими програмістами. Якщо ви і так знаєте про це все, то перепрошую за витрачений час. У той же час, якщо є чимось поділитися — порадьте щось корисне в коментарях.
Нагадуємо:для всіх читачів "Хабра" - знижка 10 000 рублів при записі на будь-який курс Skillbox за промокодом "Хабр".
Функція switch
Мені дуже подобається дуже switch(). Фактично це зручне скорочення оператора if при виборі значення відповідно до значення іншої змінної. Я знаходжу це особливо корисно, коли пишу код, який повинен завантажувати певний набір даних відповідно до попереднього вибору. Наприклад, якщо є змінна з ім'ям animal і потрібно вибрати певний набір даних залежно від того, чи тварина є собакою, кішкою або кроликом, пишіть так:
Ця можливість буде корисною у Shiny-додатках, де потрібно завантажувати різні набори даних або файли оточення залежно від одного або декількох пунктів меню введення.
Гарячі клавіші для RStudio
Цей хак не так для R, як для RStudio IDE. Проте гарячі клавіші завжди дуже зручні, дозволяючи заощаджувати час під час введення тексту. Мої улюбленці — Ctrl+Shift+M для оператора %>% та Alt+- для оператора <-.
Щоб переглянути всі гарячі клавіші, просто натисніть Alt+Shift+K у RStudio.
Пакет flexdashboard
Коли потрібно швидко запустити панель керування Shiny, немає нічого кращого, ніж пакет dashboard. Він надає можливість працювати з ярликами HTML, які в свою чергу дозволяють легко та без проблем створювати сайдбари, рядки та колонки. Є і можливість використовувати title bar, що дозволяє розміщувати його на різних сторінках програми, залишати іконки, ярлики на Github, адреси email та багато іншого.
Пакет дозволяє працювати в рамках Rmarkdown, так що можна розміщувати всі додатки в одному Rmd-файлі, а не розподіляти їх по різних серверах та UI-файлах, як це робиться, наприклад, за допомогою shinydashboard. Я використовую flexdashboard завжди, коли мені потрібно створити простий прототип панелі керування, перш ніж починати працювати над чимось складним. Ця функція дає змогу створити прототип протягом години.
Функції req та validate у R Shiny
Розробка R Shiny може вас заплутати, особливо коли постійно отримуєш дивні повідомлення про помилки, що не дозволяють зрозуміти, що відбувається. Але з часом Shiny розвивається і вдосконалюється, тут з'являється все більше і більше функцій, які дозволяють розібратися внаслідок помилки. Так, req() вирішує проблему з «тихою» помилкою, коли взагалі незрозуміло, у чому річ. З нею можна відобразити елементи інтерфейсу користувача, пов'язані з попередніми діями. Пояснимо на прикладі:
output$go_button < — shiny::renderUI({
# only display button if an animal input has been chosen
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, no cats or rabbits
shiny::validate(
need(«Dog Name» %in% colnames(data)),
"Dog Name column not found - did you load the right file?"
)
Зберігання своїх облікових даних для себе у системному оточенні
Якщо ви плануєте поділитися кодом, де потрібно ввести дані доступу, використовуйте системне оточення для того, щоб уникнути розміщення власних облікових даних у Github або іншому сервісі. Приклад розміщення:
Ще зручніше (особливо якщо дані використовуються вами часто) встановити їх як змінні оточення прямо в операційній системі. У цьому випадку вони будуть доступні завжди і не доведеться вказувати їх у коді.
Автоматизація tidyverse зі styler
Почистити код може допомогти пакет styler, який має багато можливостей для автоматичного приведення стилю коду в tidyverse. Все, що потрібно для цього, запустити styler::style_file() для вашого проблемного скрипту. Пакет зробить дуже багато (але не все) для того, щоб навести лад.
Параметризація документів R Markdown
Отже, ви створили чудовий документ R Markdown, в якому аналізуєте різні факти про собак. І тоді вам спадає на думку, що краще було б провести ту ж роботу, але тільки з кішками. Нічого страшного, можна автоматизувати створення звітів про кішок за допомогою лише однієї команди. Для цього потрібно лише налаштувати ваш документ R markdown.
Зробити це можна, задавши параметри для заголовка YAML у зазначеному документі, а потім параметри значення.
Тепер можна прописати всі змінні в коді документа як params$animal_name та params$years_of_study. Потім скористаємося меню Knit (або knit_with_parameters()) і отримаємо можливість вибирати параметри.
revealjs
revealjs - пакет, що дає можливість створювати відмінні HTML-презентації з вбудованим R-кодом, інтуїтивною навігацією та слайд-меню. HTML-ярлики дозволяють швидко створювати вкладену структуру слайдів із різними варіантами стилів. Ну а HTML запуститься на будь-якому пристрої, тому презентацію зможуть відкрити на кожному телефоні, планшеті або ноутбуці. Розкриття інформації можна налаштувати, встановивши пакет та викликавши його в YAML-заголовку. Ось приклад:
- title: "Exporing the Edge of the People Analytics Universe"
author: "Keith McNulty"
вихід:
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
-
Більшість програмістів не використовують усі переваги HTML-тегів, які є у R Shiny. А це всього 110 тегів, які дають можливість створити короткий виклик для HTML-функції або відтворення медіа. Наприклад, нещодавно я застосував tags$audio для відтворення переможного звуку, який попереджав користувача про завершення виконання завдання.
Пакет praise
Використовувати цей пакет дуже просто, а потрібний він для виведення похвали користувачеві. Це здається дивним, але насправді їм це подобається.