Изучаем Shiny [Хэдли Уикем] (pdf) читать онлайн

-  Изучаем Shiny  [Создание интерактивных приложений, отчетов и дашбордов при помощи R] (пер. А. Ю. Гинько) 12.78 Мб, 376с. скачать: (pdf) - (pdf+fbd)  читать: (полностью) - (постранично) - Хэдли Уикем

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Хэдли Уикем

Изучаем Shiny

Mastering Shiny
Build Interactive Apps, Reports,
and Dashboards Powered by R

Hadley Wickham

Beijing • Boston • Farnham • Sebastopol • Tokyo

Изучаем Shiny
Создание интерактивных приложений,
отчетов и дашбордов при помощи R

Хэдли Уикем

Москва, 2022

УДК 004.42
ББК 32.973
У35

У35

Уикем Х.
Изучаем Shiny / пер. с англ. А. Ю. Гинько. – М.: ДМК Пресс, 2022. – 374 с.:
ил.
ISBN 978-5-97060-964-4
Эта книга знакомит читателей с фреймворком Shiny, который существенно
облегчает работу программистам при создании интерактивных веб-приложений
на языке R. В начале руководства описываются структура приложения и важные компоненты пользовательского интерфейса. Далее представлены способы
решения распространенных задач, включая взаимодействие с пользователем,
загрузку и скачивание данных, создание пользовательского интерфейса при помощи кода. Также рассматриваются углубленная теория и практика реактивного
программирования.
Издание будет полезно разработчикам R, планирующим перейти от базового
анализа к полноценным интерактивным веб-приложениям, а также разработчикам Shiny, желающим улучшить свои навыки владения этим инструментом для
написания более быстрых и эффективных приложений.

УДК 004.42
ББК 32.973

Authorized Russian translation of the English edition of Mastering Shiny ISBN 9781492047384.
This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. Russian language edition copyright © 2022 by DMK
Press. All rights reserved.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.

ISBN 978-1-492-04738-4 (англ.)
ISBN 978-5-97060-964-4 (рус.)

© Hadley Wickham, 2021
© Перевод, оформление, издание,
ДМК Пресс, 2022

Содержание
Телеграм канал: https://t.me/it_boooks
От издательства. ...................................................................................................14
Введение. .................................................................................................................15
Благодарности.......................................................................................................20
Как была написана эта книга.........................................................................21
Об изображении на обложке.........................................................................22
Часть I. ПРИСТ УПАЕМ К РАБОТЕ ............................................................23
Глава 1. Ваше первое приложение Shiny.................................................24
Введение.......................................................................................................................24
Создание директории и файла приложения. .........................................................24
Запуск и остановка. ....................................................................................................25
Добавление элементов пользовательского интерфейса.......................................27
Добавление поведения. .............................................................................................28
Снижение дублирования кода при помощи реактивных выражений. ..............29
Заключение..................................................................................................................30
Упражнения.................................................................................................................31

Глава 2. Основы интерфейса пользователя............................................35
Введение.......................................................................................................................35
Элементы ввода. .........................................................................................................35
Базовая структура...................................................................................................36
Текст. ........................................................................................................................36
Числовой ввод.........................................................................................................37
Даты..........................................................................................................................38
Ограниченный выбор............................................................................................39
Загрузка файлов......................................................................................................41
Кнопки......................................................................................................................42
Упражнения.............................................................................................................43
Элементы вывода........................................................................................................43
Текст. ........................................................................................................................44
Таблицы. ..................................................................................................................45
Графики....................................................................................................................47
Загрузка файлов......................................................................................................48
Упражнения.............................................................................................................48
Заключение..................................................................................................................49

6  Содержание

Глава 3. Основы реактивного программирования..............................50
Введение.......................................................................................................................50
Функция server. ...........................................................................................................50
Input..........................................................................................................................51
Output.......................................................................................................................52
Реактивное программирование. ..............................................................................53
Императивное программирование против декларативного. .........................55
Ленивые вычисления.............................................................................................55
Реактивный график................................................................................................56
Реактивные выражения.........................................................................................57
Порядок выполнения.............................................................................................57
Упражнения.............................................................................................................58
Реактивные выражения.............................................................................................59
Предпосылки...........................................................................................................60
Приложение.............................................................................................................62
Реактивный график................................................................................................63
Упрощение реактивного графика........................................................................65
Зачем нужны реактивные выражения?. .............................................................67
Контроль времени запуска реактивных выражений.............................................68
Обновление по расписанию. ................................................................................69
Щелчки мыши.........................................................................................................70
Наблюдатели................................................................................................................73
Заключение..................................................................................................................74

Глава 4. Практический пример: несчастные случаи...........................75
Введение.......................................................................................................................75
Данные. ........................................................................................................................75
Описание......................................................................................................................77
Прототип......................................................................................................................81
Доработка таблиц........................................................................................................83
Процент против количества......................................................................................85
Истории получения травмы......................................................................................87
Упражнения.................................................................................................................89
Заключение..................................................................................................................89

Часть II. SHINY В ДЕЙСТВИИ .....................................................................90
Глава 5. Рабочий процесс.................................................................................91
Рабочий процесс разработки приложения.............................................................91
Создание приложения...........................................................................................92
Отслеживание изменений.....................................................................................92
Управление запуском приложения......................................................................94
Отладка.........................................................................................................................94
Чтение трассировки...............................................................................................95
Трассировка в Shiny. ..............................................................................................96
Интерактивный отладчик.....................................................................................98

Содержание  7

Практический пример.........................................................................................100
Отладка реактивных выражений.......................................................................104
Получение помощи. .................................................................................................106
Основы воспроизводимых примеров. ..............................................................106
Создание воспроизводимого примера. ............................................................107
Минимальный воспроизводимый пример.......................................................108
Практический пример.........................................................................................109
Заключение................................................................................................................113

Глава 6. Макеты, темы, HTML.......................................................................114
Введение.....................................................................................................................114
Одностраничные макеты.........................................................................................114
Функции страницы...............................................................................................115
Страница с боковой панелью..............................................................................116
Многострочный вывод. .......................................................................................118
Упражнения...........................................................................................................119
Многостраничные макеты. .....................................................................................119
Наборы вкладок....................................................................................................119
Навигационный список и навигационная панель. .........................................121
Bootstrap.....................................................................................................................122
Темы............................................................................................................................123
Подготовка.............................................................................................................124
Темы Shiny.............................................................................................................124
Темы графиков......................................................................................................125
Упражнения...........................................................................................................126
За кулисами. ..............................................................................................................126
Заключение................................................................................................................128

Глава 7. Графики..................................................................................................129
Интерактивность. .....................................................................................................129
Основы...................................................................................................................129
Щелчки мыши.......................................................................................................131
Другие события мыши.........................................................................................133
Выделение прямоугольной области. .................................................................133
Изменение графика. ............................................................................................135
Ограничения интерактивности..........................................................................138
Динамическая ширина и высота............................................................................139
Изображения. ............................................................................................................141
Заключение................................................................................................................143

Глава 8. Обратная связь с пользователем.............................................144
Проверка значений...................................................................................................144
Проверка ввода.....................................................................................................145
Отмена выполнения при помощи функции req()............................................146
Функция req() и проверка данных. ....................................................................149
Проверка элементов вывода...............................................................................151

8  Содержание
Оповещения. .............................................................................................................152
Временные оповещения......................................................................................152
Оповещения о выполнении процесса...............................................................153
Обновляемые оповещения. ................................................................................154
Индикатор хода выполнения задачи.....................................................................155
Shiny. ......................................................................................................................155
Waiter......................................................................................................................157
Вращающийся индикатор прогресса (спиннер)..............................................158
Подтверждение и отмена действий.......................................................................161
Явное подтверждение..........................................................................................161
Отмена действия. .................................................................................................163
Корзина..................................................................................................................165
Заключение................................................................................................................165

Глава 9. Загрузка и скачивание файлов. ................................................166
Загрузка......................................................................................................................166
Интерфейс пользователя.....................................................................................166
Серверная часть....................................................................................................167
Загрузка данных. ..................................................................................................168
Скачивание................................................................................................................169
Основы...................................................................................................................169
Скачивание данных. ............................................................................................170
Скачивание отчетов.............................................................................................171
Практический пример. ............................................................................................174
Упражнения...............................................................................................................176
Заключение................................................................................................................178

Глава 10. Динамический интерфейс пользователя..........................179
Обновление элементов ввода.................................................................................179
Простое использование.......................................................................................181
Иерархические выпадающие списки................................................................182
Заморозка реактивного ввода............................................................................185
Циклические ссылки............................................................................................186
Взаимосвязанные элементы ввода....................................................................187
Упражнения...........................................................................................................188
Динамическая видимость. ......................................................................................189
Условный интерфейс пользователя...................................................................190
Интерфейс мастера..............................................................................................192
Упражнения...........................................................................................................193
Создание интерфейса пользователя при помощи кода. ....................................194
Введение. ...............................................................................................................194
Множественные элементы управления............................................................196
Динамическая фильтрация.................................................................................198
Диалоговые окна. .................................................................................................203
Упражнения...........................................................................................................203
Заключение................................................................................................................204

Содержание  9

Глава 11. Закладки. ...........................................................................................206
Основная идея...........................................................................................................206
Обновление ссылки..............................................................................................209
Сохранение состояния в файл............................................................................210
Сложности при сохранении закладок. ..................................................................210
Упражнения...............................................................................................................211
Заключение................................................................................................................212

Глава 12. Tidy eval..............................................................................................213
Предпосылки.............................................................................................................213
Маскирование данных.............................................................................................215
Введение. ...............................................................................................................215
Пример: ggplot2....................................................................................................216
Пример: dplyr........................................................................................................219
Пользовательские данные...................................................................................221
Почему бы не использовать базовый синтаксис R?........................................223
Tidy-Selection.............................................................................................................223
Косвенная адресация...........................................................................................224
Tidy-Selection и маскирование данных.............................................................224
Функции parse() и eval()...........................................................................................225
Заключение................................................................................................................226

Часть III. ОСВАИВАЕМ РЕАКТИВНОСТЬ ..........................................227
Глава 13. Зачем нужна реактивность?. ...................................................228
Введение.....................................................................................................................228
Зачем нужно реактивное программирование?....................................................229
Почему нельзя использовать переменные?.....................................................229
А как насчет функций?. .......................................................................................230
Событийно-ориентированное программирование........................................230
Реактивное программирование.........................................................................232
Краткая история реактивного программирования.............................................233
Заключение................................................................................................................234

Глава 14. Реактивный график......................................................................235
Введение.....................................................................................................................235
Пошаговое реактивное выполнение......................................................................235
Начало сессии........................................................................................................236
Начало выполнения первого элемента вывода...............................................237
Чтение реактивного выражения........................................................................238
Чтение элемента ввода........................................................................................238
Окончание выполнения реактивного выражения. .........................................239
Окончание выполнения элемента вывода.......................................................239
Начало выполнения второго элемента вывода. ..............................................240
Завершение процесса выполнения, вывод расчетов......................................240
Изменение элемента ввода.....................................................................................241

10  Содержание
Инвалидация ввода..............................................................................................241
Оповещение зависимостей.................................................................................242
Удаление текущих связей....................................................................................242
Повторное выполнение.......................................................................................243
Упражнения...........................................................................................................244
Динамизм...................................................................................................................245
Пакет reactlog. ...........................................................................................................246
Заключение................................................................................................................248

Глава 15. Строительные блоки реактивного
программирования...........................................................................................249
Реактивные значения...............................................................................................249
Упражнения...........................................................................................................251
Реактивные выражения...........................................................................................251
Ошибки. .................................................................................................................251
on.exit()...................................................................................................................252
Упражнения...........................................................................................................252
Наблюдатели и элементы вывода. .........................................................................253
Изолирование кода...................................................................................................255
isolate()...................................................................................................................255
observeEvent() и eventReactive()..........................................................................256
Упражнения...........................................................................................................256
Инвалидация по времени........................................................................................257
Опрос......................................................................................................................257
Долгоиграющие реактивы...................................................................................258
Точность таймера. ................................................................................................259
Упражнения...........................................................................................................260
Заключение. ..........................................................................................................260

Глава 16. Отхождение от графика.............................................................261
Введение.....................................................................................................................261
Что не охватывает реактивный график?...............................................................261
Практические примеры...........................................................................................263
Один элемент вывода изменяется посредством нескольких
элементов ввода. ..................................................................................................263
Накапливание ввода. ...........................................................................................264
Приостановка анимации.....................................................................................265
Упражнения...........................................................................................................266
Антишаблоны............................................................................................................267
Заключение................................................................................................................268

Часть IV. ЭФФЕКТИВНЫЕ ПРИЕМЫ ....................................................269
Глава 17. Общие принципы...........................................................................271
Введение.....................................................................................................................271
Организация кода.....................................................................................................272

Содержание  11

Тестирование.............................................................................................................273
Управление зависимостями....................................................................................273
Контроль версий исходного кода. ..........................................................................274
Непрерывная интеграция/развертывание. ..........................................................275
Анализ кода. ..............................................................................................................276
Заключение................................................................................................................277

Глава 18. Функции..............................................................................................278
Организация файлов................................................................................................279
Функции интерфейса пользователя. .....................................................................279
Другое применение..............................................................................................280
Функциональное программирование...............................................................281
Интерфейс пользователя в виде структуры данных.......................................281
Серверные функции.................................................................................................282
Чтение загруженных данных..............................................................................282
Внутренние функции...........................................................................................284
Заключение................................................................................................................284

Глава 19. Модули Shiny...................................................................................286
Предпосылки.............................................................................................................286
Основы модульной системы...................................................................................288
Интерфейс модуля................................................................................................289
Серверная логика модуля....................................................................................289
Обновленное приложение. .................................................................................290
Пространства имен. .............................................................................................291
Соглашение об именовании. ..............................................................................292
Упражнения...........................................................................................................292
Ввод и вывод..............................................................................................................293
Приступим: интерфейсный ввод и серверный вывод....................................294
Практический пример: выбор числовой переменной....................................295
Серверный ввод....................................................................................................297
Вложенные модули...............................................................................................298
Практический пример: гистограмма. ...............................................................298
Множественный вывод........................................................................................300
Упражнения...........................................................................................................302
Практические примеры...........................................................................................303
Ограниченный выбор вариантов и пункт Другие...........................................303
Мастер....................................................................................................................306
Динамический интерфейс пользователя..........................................................310
Модули в виде единого объекта. ............................................................................312
Заключение................................................................................................................314

Глава 20. Пакеты.................................................................................................315
Преобразование существующего приложения....................................................316
Один файл..............................................................................................................316
Модульная структура...........................................................................................318

12  Содержание
Пакет.......................................................................................................................319
Преимущества...........................................................................................................320
Рабочий процесс...................................................................................................320
Совместное использование.................................................................................321
Дополнительные шаги.............................................................................................322
Развертывание приложения-пакета..................................................................322
R CMD check...........................................................................................................322
Заключение................................................................................................................324

Глава 21. Тестирование....................................................................................325
Тестирование функций............................................................................................326
Базовая структура.................................................................................................327
Основной рабочий процесс.................................................................................327
Основные функции ожидания............................................................................328
Функции интерфейса пользователя..................................................................330
Рабочий процесс.......................................................................................................332
Покрытие кода......................................................................................................332
Сочетания клавиш................................................................................................333
Резюме по рабочему процессу............................................................................333
Тестирование реактивов..........................................................................................334
Модули. ..................................................................................................................335
Ограничения. ........................................................................................................337
Тестирование JavaScript...........................................................................................337
Основные операции.............................................................................................338
Практический пример.........................................................................................340
Тестирование визуальных элементов. ..................................................................342
Философия.................................................................................................................343
Когда стоит писать тесты?...................................................................................343
Заключение................................................................................................................344

Глава 22. Безопасность....................................................................................345
Данные. ......................................................................................................................346
Вычислительные ресурсы........................................................................................347

Глава 23. Производительность....................................................................350
Ужин в ресторане Shiny. ..........................................................................................351
Оценка производительности..................................................................................352
Запись.....................................................................................................................352
Запуск.....................................................................................................................353
Анализ....................................................................................................................354
Профилирование. .....................................................................................................356
Огненный график.................................................................................................356
Профилирование кода R......................................................................................358
Профилирование приложения Shiny.................................................................359
Ограничения. ........................................................................................................360
Повышение производительности..........................................................................361

Содержание  13

Кеширование.............................................................................................................361
Основы...................................................................................................................362
Кеширование реактивов......................................................................................362
Кеширование графиков.......................................................................................364
Ключи кеширования............................................................................................365
Область видимости кеша.....................................................................................366
Другие способы оптимизации................................................................................366
Запланированные преобразования данных.....................................................366
Управление ожиданиями пользователя. ..........................................................367
Заключение................................................................................................................368

Предметный указатель. ..................................................................................369

От издательства
Отзывы и пожелания
Мы всегда рады отзывам наших читателей. Расскажите нам, что вы ду­маете
об этой книге – что понравилось или, может быть, не понравилось. Отзывы
важны для нас, чтобы выпускать книги, которые будут для вас максимально
полезны.
Вы можете написать отзыв на нашем сайте www.dmkpress.com, зайдя на
страницу книги и оставив комментарий в разделе «Отзывы и рецензии».
Также можно послать письмо главному редактору по адресу dmkpress@gmail.
com; при этом укажите название книги в теме письма.
Если вы являетесь экспертом в какой-либо области и заинтересованы в написании новой книги, заполните форму на нашем сайте по адресу http://
dmkpress.com/authors/publish_book/ или напишите в издательство по адресу
dmkpress@gmail.com.

Скачивание исходного кода примеров
Скачать файлы с дополнительной информацией для книг издательства «ДМК
Пресс» можно на сайте www.dmkpress.com на странице с описанием соответствующей книги.

Список опечаток
Хотя мы приняли все возможные меры для того, чтобы обеспечить высокое качество наших текстов, ошибки все равно случаются. Если вы найдете
ошибку в одной из наших книг, мы будем очень благодарны, если вы сообщите о ней главному редактору по адресу dmkpress@gmail.com. Сделав это,
вы избавите других читателей от недопонимания и поможете нам улучшить
последующие издания этой книги.

Нарушение авторских прав
Пиратство в интернете по-прежнему остается насущной проблемой. Издательства «ДМК Пресс» и OʼReilly очень серьезно относятся к вопросам защиты авторских прав и лицензирования. Если вы столкнетесь в интернете с незаконной
публикацией какой-либо из наших книг, пожалуйста, пришлите нам ссылку на
интернет-ресурс, чтобы мы могли применить санкции.
Ссылку на подозрительные материалы можно прислать по адресу элект­
ронной почты dmkpress@gmail.com.
Мы высоко ценим любую помощь по защите наших авторов, благодаря
которой мы можем предоставлять вам качественные материалы.

Введение
Если вы никогда прежде не использовали Shiny, добро пожаловать! Shiny
представляет собой фреймворк языка программирования R, позволяющий
с легкостью создавать функциональные интерактивные веб-приложения.
С помощью Shiny вы можете перенести свою работу в R и представить ее
результаты в браузере, чтобы все могли свободно ими пользоваться. Shiny
способствует разработке сложных и эффективных веб-приложений с минимумом усилий.
В прошлом разработка веб-приложений на R давалась программистам
весьма непросто, и на то было две основные причины:
  им нужно было в полной мере владеть современными веб-технологиями,
включая языки HTML, CSS и JavaScript;
  в сложных интерактивных приложениях им приходилось внимательно
отслеживать все связи между элементами, чтобы изменения входных
значений влияли только на связанные с ними выходные.
Фреймворк Shiny значительно облегчает работу программистам при создании веб-приложений за счет:
  предоставления тщательно проработанного набора функций пользовательского интерфейса для автоматического генерирования кода
HTML, CSS и JavaScript, необходимого для решения конкретных задач.
Это означает, что вам не понадобится доскональное знание этих языков программирования и разметки, пока вам не станет тесно в рамках
предоставляемых Shiny возможностей;
  применения нового стиля программирования, получившего название
реактивное. С помощью этой концепции можно легко отслеживать
и поддерживать зависимости между фрагментами кода. На практике
это означает, что при изменении значения входного элемента Shiny
автоматически определит, как с наименьшими усилиями обновить все
связанные выходные элементы.
Разработчики используют Shiny для:
  создания дашбордов, помогающих в отслеживании высокоуровневых
показателей с возможностью проводить детализированный анализ
при необходимости;
  замены сотен страниц в формате PDF на одно интерактивное приложение, позволяющее пользователю переключаться между нужными
ему результатами;
  донесения информации о сложных моделях до аудитории, не обладающей техническими знаниями, в виде информативных визуализаций
и средств интерактивного анализа;
  автоматизации анализа данных в общих рабочих процессах с заменой
процесса обмена электронными сообщениями на приложение Shiny,
позволяющее пользователям загружать свои данные и выполнять

16  Введение
стандартный анализ. Таким образом можно сделать доступным продвинутый анализ в R пользователям, не обладающим навыками программирования;
  создания интерактивных демонстраций при обучении статистике
и концепциям науки о данных, позволяющих студентам менять входные значения и наблюдать за изменениями в итоговом анализе.
Иными словами, с Shiny вы с легкостью можете делегировать некоторые
свои суперспособности в R всякому, у кого есть доступ в интернет.

Для кого предназначена эта книга?
Прочитать данную книгу стоит двум основным группам аудитории:
  разработчикам R, заинтересованным в освоении фреймворка Shiny
с целью перехода от базового анализа к полноценным интерактивным
веб-приложениям. Чтобы взять от книги все, вам необходимо обладать
определенным опытом анализа данных при помощи языка R и написания функций;
  разработчикам Shiny, желающим улучшить свои навыки владения этим
инструментом для написания более быстрых и эффективных приложений. Вам будет особенно полезна эта книга, если ваши приложения
постепенно начинают разрастаться и вам становится все сложнее конт­
ролировать происходящие в них процессы.

Что вы узнаете из этой книги?
Книга поделена на четыре части.
1. В первой части мы познакомимся с основами фреймворка Shiny, чтобы
вы могли как можно быстрее написать свое первое приложение. Мы
поговорим о структуре приложения, полезных компонентах пользовательского интерфейса и основах реактивного программирования.
2. Во второй части книги мы сделаем один шаг вперед и познакомимся
со способами решения распространенных задач, включая взаимодействие с пользователем, загрузку и скачивание данных, создание пользовательского интерфейса при помощи кода, сокращение дублирующихся фрагментов кода и использование Shiny совместно с tidyverse.
3. Третья часть будет посвящена углубленной теории и практике реактивного программирования – базовой парадигмы, лежащей в основе Shiny.
Если вы уже работаете с этим фреймворком, вы сможете извлечь максимум выгоды из данной главы, поскольку она закладывает теоретический
фундамент, который поможет вам в разработке сложных интерактивных
приложений, предназначенных для решения широкого спектра задач.
4. В заключительной части книги мы завершим исследование полезных
техник, призванных повысить эффективность ваших приложений Shiny.

Требования  17

Вы узнаете, как выполнять процесс декомпозиции сложного приложения на функции и модули, использовать пакеты для лучшей организации вашего кода, тестировать свои работы на предмет наличия ошибок,
а также измерять и улучшать производительность приложений.

Чего вы не узнаете из этой книги?
Данная книга целиком и полностью посвящена созданию эффективных приложений с по­мощью Shiny и принципам лежащего в ее основе реактивного
программирования. Я сделаю все возможное, чтобы показать вам лучшие
приемы в работе с данными, программировании на языке R и инженерии
программного обеспечения, но вам придется почитать и другие источники,
чтобы в полной мере овладеть всеми этими навыками. Если вам нравится,
как я пишу, вы можете посмотреть и другие мои книги на эту тему: R for Data
Science (https://r4ds.had.co.nz), Advanced R (https://adv-r.hadley.nz) и R Packages
(https://r-pkgs.org).
Также есть несколько тем из области Shiny, которых я не буду касаться
в данной книге:
  при написании приложений мы будем рассматривать только встроенный набор инструментов пользовательского интерфейса (user interface
toolkit). Может, он и не самый привлекательный, но для обучения очень
даже подойдет. Если вам нужно больше или просто надоел базовый интерфейс, на просторах интернета есть множество пакетов, позволяющих
до неузнаваемости изменить внешний вид ваших приложений. Подроб­
нее читайте в разделе книги, посвященном фреймворку Bootstrap;
  тема развертывания приложений Shiny выходит за рамки данной
книги, поскольку здесь многое зависит от сторонних факторов, не
имеющих отношения к R, – больше культурного и организационного
свойства, но никак не технического. Если вы делаете первые шаги в вопросах развертывания приложений Shiny, я бы посоветовал посмотреть
выступление Джо Ченга по адресу https://www.rstudio.com/resources/rstudioconf-2019/shiny-in-production-principles-practices-and-tools/. Из него
вы почерпнете все базовые вещи, связанные с развертыванием приложений, включая распространенные проблемы и способы их решения.
После этого я бы рекомендовал посетить страницу https://www.rstudio.
com/products/connect, посвященную продукту RStudio Connect, предназначенному для развертывания приложений в рамках организации,
а также соответствующий раздел на сайте Shiny по адресу https://shiny.
rstudio.com/articles/#deployment.

Требования
Перед тем как продолжить, убедитесь в том, что у вас на компьютере стоит
все необходимое программное обеспечение для работы:

18  Введение

R
Если у вас еще не установлен R на компьютере, возможно, вы читаете не ту
книгу. Мы на протяжении книги будет предполагать, что у вас есть базовые
знания о языке R. Если вы хотите узнать, как использовать R, я бы рекомендовал для чтения книгу R for Data Science (https://r4ds.had.co.nz), которая позволит вам сделать первые шаги в этой новой для вас среде.

RStudio
RStudio представляет собой бесплатную интегрированную среду разработки
(integrated development environment – IDE) для R. И хотя вы можете создавать
и использовать приложения на Shiny в любом окружении R, включая R GUI
и ESS, именно RStudio обладает некоторыми полезными особенностями, облегчающими написание, отладку и развертывание приложений Shiny. Мы
рекомендуем вам загрузить RStudio Desktop по адресу https://www.rstudio.
com/products/rstudio/download/ и дать ему шанс. В то же время это совершенно
не обязательно для разработки приложений и чтения книги.

Пакеты R
В этой книге мы будем использовать множество пакетов R. Вы можете установить их все сразу, запустив следующий код:
install.packages(c(
"gapminder", "ggforce", "gh", "globals", "openintro", "profvis",
"RSQLite", "shiny", "shinycssloaders", "shinyFeedback",
"shinythemes", "testthat", "thematic", "tidyverse", "vroom",
"waiter", "xml2", "zeallot"
))

Если вы уже загружали пакет Shiny ранее, убедитесь, что у вас установлена
его версия не ниже 1.6.0.

Принятые в книге обозначения
При написании книги мы использовали следующие обозначения:
  курсив – обозначает новые термины, ссылки, электронные адреса, имена и расширения файлов;
  моноширинный шрифт – используется в листингах и при обозначении программных элементов, таких как имена переменных или функций, баз
данных, типов данных, переменных окружения, выражений и ключевых слов.

Использование примеров кода  19

Использование примеров кода
Сопроводительные материалы (фрагменты кода, упражнений и т. д.) доступны для загрузки по адресу https://mastering-shiny.org/. На все листинги в книге
распространяется лицензия MIT (MIT License): https://www.mit.edu/~amini/
LICENSE.md.
Если у вас есть технические вопросы относительно фрагментов кода, можете написать нам по адресу bookquestions@oreilly.com.
Вы вправе использовать материалы из книги для решения своих задач.
В основном код, представленный в данной книге, можно использовать в собственных программах и документации. Вы не обязаны обращаться к нам за
разрешением, если речь идет не о копировании большого фрагмента текста.
Например, использование нескольких фрагментов из книги при написании
своей программы не потребует специального разрешения. В то же время
продажа или распространение материалов, принадлежащих O’Reilly, предполагает наличие разрешения. Ответы на вопросы с использованием цитирования из этой книги не требуют разрешения. А включение большой части
текста из этой книги в свою документацию – требует.
Мы будем признательны, если вы будете ссылаться на книгу при цитировании, хотя и не требуем от вас этого. Обычно такие ссылки включают в себя
название книги, имя автора и название издательства, а также ISBN. Например, «Mastering Shiny by Hadley Wickham (O’Reilly). Copyright 2021 Hadley
Wickham, 978-1-492-04738-4».
Для получения разрешений можно обратиться по адресу permissions@
oreilly.com.

Благодарности
Данная книга была написана в открытую, а по ее окончании главы свободно
выкладывались в Twitter. Таким образом, книгу можно назвать полноценным
совместным опытом, а в процессе ее написания очень многие люди вычитывали черновики, исправляли опечатки, предлагали улучшения и вносили
свой вклад в содержимое. Без этой неоценимой помощи книга никогда не
стала бы такой, какой вы ее видите, и я очень признателен всем, кто внес
свою лепту в ее написание.
Мы хотели бы поблагодарить поименно всех 83 человек, предложивших
свои улучшения на GitHub (в алфавитном порядке): Adam Pearce (@1wheel),
Adi Sarid (@adisarid), Alexandros Melemenidis (@alex-m-ffm), Anton Klåvus (@
antonvsdata), Betsy Rosalen (@betsyrosalen), Michael Beigelmacher (@brooklynbagel), Bryan Smith (@BSCowboy), c1au6io_hh (@c1au6i0), @canovasjm,
Chris Beeley (@ChrisBeeley), @chsafouane, Chuliang Xiao (@ChuliangXiao),
Conor Neilson (@condwanaland), @d-edison, Dean Attali (@daattali), DanielDavid521 (@Danieldavid521), David Granjon (@DivadNojnarg), Eduardo Vásquez
(@edovtp), Emil Hvitfeldt (@EmilHvitfeldt), Emilio (@emilopezcano), Emily Riederer (@emilyriederer), Eric Simms (@esimms999), Federico Marini (@federicomarini), Frederik Kok Hansen (@fkoh111), Frans van Dunné (@FvD), Giorgio
Comai (@giocomai), Hedley (@heds1), Henning (@henningsway), Hlynur (@
hlynurhallgrims), @hsm207, @jacobxk, James Pooley (@jamespooley), Joe Cheng
(@jcheng5), Julien Colomb (@jcolomb), Juan C. Rodriguez (@jcrodriguez1989),
Jennifer (Jenny) Bryan (@jennybc), Jim Hester (@jimhester), Joachim Gassen (@
joachim-gassen), Jon Calder (@jonmcalder), Jonathan Carroll (@jonocarroll),
Julian Stanley (@julianstanley), @jyuu, @kaanpekel, Karandeep Singh (@kdpsingh), Robert Kirk DeLisle (@KirkDCO), Elaine (@loomalaine), Malcolm Barrett
(@malcolmbarrett), Marly Gotti (@marlycormar), Matthew Wilson (@MattWGeospatial), Matthew T. Warkentin (@mattwarkentin), Mauro Lepore (@maurolepore), Maximilian Rohde (@maxdrohde), Matthew Berginski (@mbergins),
Michael Dewar (@michael-dewar), Mine Cetinkaya-Rundel (@mine-cetinkayarundel), Maria Paula Caldas (@mpaulacaldas), nthobservation (@nthobservation), Pietro Monticone (@pitmonticone), psychometrician (@psychometrician),
Ram Thapa (@raamthapa), Janko Thyson (@rappster), Rebecca Janis (@rbjanis),
Tom Palmer (@remlapmot), Russ Hyde (@russHyde), Barret Schloerke (@schloerke), Scott (@scottyd22), Matthew Sedaghatfar (@sedaghatfar), Shixiang Wang (@
ShixiangWang), Praer (Suthira Owlarn) (@sowla), Sébastien Rochette (@statnmap), @stevensbr, André Calero Valdez (@Sumidu), Tanner Stauss (@tmstauss),
Tony Fujs (@tonyfujs), Stefan Moog (@trekonom), Jeff Allen (@trestletech), Trey
Gilliland (@treygilliland), Albrecht (@Tungurahua), Valeri Voev (@ValeriVoev),
(@XiangyunHuang)
Vickus (@Vickusr), William Doane (@WilDoane),
и gXcloud (@xwydq).

Как была написана
эта книга
Книга была написана в RStudio с использованием пакета bookdown (http://
bookdown.org).
При написании книги использовался R версии 4.0.3 (2020-10-10) и следующие версии пакетов:
Пакет
gapminder
Ggforce
Gh
Globals
Openintro
Profvis
RSQLite
Shiny
shinycssloaders
shinyFeedback
shinythemes
Testthat
Thematic
Tidyverse
Vroom
Waiter
xml2
Zeallot

Версия
0.3.0
0.3.2
1.2.0
0.14.0
2.0.0
0.3.7.9000
2.2.3
1.6.0
1.0.0
0.3.0
1.2.0
3.0.2.9000
0.1.1
1.3.0
1.3.2
0.2.0
1.3.2
0.1.0

Источник
standard (@0.3.0)
standard (@0.3.2)
standard (@1.2.0)
standard (@0.14.0)
standard (@2.0.0)
GitHub(rstudio/profvis@ca1b272)
standard (@2.2.3)
standard (@1.6.0)
standard (@1.0.0)
standard (@0.3.0)
standard (@1.2.0)
Hub (r-lib/testthat@4793514)
GitHub (rstudio/thematic@d78d24a)
standard (@1.3.0)
standard (@1.3.2)
standard (@0.2.0)
standard (@1.3.2)
standard (@0.1.0)

Об изображении
на обложке
На обложке книги изображен кереру, или новозеландский плодоядный голубь (kererū, лат. Hemiphaga novaeseelandiae) – единственная птица семейства
голубиных, встречающаяся на территории Новой Зеландии.
Оперение новозеландского голубя имеет бронзовый окрас, а его тело и голова окрашены в глянцевые пурпурно-зеленые оттенки. Брюшко у птицы
белое, а клюв – под стать глазам – красный. Новозеландский голубь издает
мягкие воркующие звуки, а при взлете и приземлении отчетливо и звучно
бьет крыльями. Обычно стройный, изящный и активный голубь набирает
массу в сезон фруктов, а также в период размножения.
Поскольку кереру являются одними из немногих представителей птиц
в Новой Зеландии, способных глотать фрукты целиком, они играют заметную
роль в распространении семян растений по территории страны. Любопытно,
но за ними прочно закрепилось прозвище пьяный голубь – объевшись забродивших фруктов, они часто падают с веток деревьев.
В культурной жизни племени маори новозеландский плодоядный голубь
всегда играл очень заметную роль. Так, по преданию, один из основных
персонажей полинезийской мифологии и трикстер Мауи в поисках предков
в загробном мире принял форму именно этой птицы. И хотя народ маори
традиционно использовал в быту мясо, кости и перья кереру, в настоящее
время охота на этих птиц строго запрещена.
По причине засилья браконьеров, а также ввиду загрязнения окружающей среды Международный союз по охране природы внес новозеландского
голубя в список исчезающих животных. Многие представители фауны, помещенные на обложки книг издательства O’Reilly, находятся в опасности, им
грозит исчезновение.
Цветная иллюстрация Карена Монтгомери (Karen Montgomery) основана
на черно-белом оттиске из британского журнала British Birds. При оформлении обложки были использованы шрифты Gilroy Semibold и Guardian Sans.
Шрифт текста в оригинале – Adobe Minion Pro, шрифт заголовков – Adobe
Myriad Condensed, а шрифт листингов – Ubuntu Mono от компании Dalton
Maag.

Часть

I
ПРИСТ УПАЕМ
К РАБОТЕ

Прочитав первые четыре главы книги, вы сможете написать свое первое приложение с использованием фреймворка Shiny. Первая глава будет посвящена
базовым принципам приложения Shiny и его структуре. Во второй и третьей
главах вы погрузитесь в детальный разбор двух основных составляющих
любого приложения Shiny: клиентского интерфейса, или фронтенда (того,
что пользователь видит в браузере), и серверной части, или бэкенда (кода,
заставляющего приложение работать). А завершим мы первую часть книги
примером из практики, который поможет закрепить все полученные ранее
знания.

Глава

1

Телеграм канал: https://t.me/it_boooks

Ваше первое
приложение Shiny
Введение
В этой главе вы создадите свое первое приложение Shiny. Начнем мы с минимальной шаблонной заготовки для полноценного приложения, после чего
научимся запускать и останавливать его. Далее вы узнаете, что из себя представляют два ключевых компонента любого приложения Shiny, а именно
UI (сокращенно от user interface – интерфейс пользователя), определяющий
внешний вид приложения, и функция server, в которой реализовано поведение приложения. Фреймворк Shiny использует принципы реактивного программирования (reactive programming) для автоматического обновления элементов вывода при изменении значений элементов ввода, так что завершим
эту главу мы знакомством с третьим важнейшим компонентом приложений
Shiny – реактивными выражениями (reactive expressions).
Если вы еще не установили пакет Shiny, сейчас самое время сделать это,
запустив следующую строку кода:
install.packages("shiny")

Если пакет Shiny у вас уже установлен, проверьте, что его версия – 1.5.0
или выше, при помощи функции packageVersion("shiny").
Затем загрузите пакет Shiny в вашу текущую сессию:
library(shiny)

Создание директории и файла приложения
Создать приложение Shiny (Shiny app) можно несколькими способами. Прос­
тейший из них – создать новую директорию для приложения и сохранить
в ней файл с именем app.R. В этом файле будет содержаться вся необходимая
информация как по внешнему виду приложения, так и по его поведению.

Запуск и остановка  25

Итак, создайте папку и сохраните в ней файл app.R со следующим содержимым:
library(shiny)
ui