- •Федеральное агентство связи
- •Введение
- •Разработка Shiny приложений
- •Структура Shiny приложения
- •Создание пользовательского интерфейса
- •Html контент
- •Изображения
- •Виджеты управления
- •Отображение реакции объектов
- •R скрипты и данные
- •Набор данных counties.Rds
- •Скрипт helpers.R
- •Загрузка файлов и указание путей
- •Завершение построения приложения
- •Использование реактивных выражений
- •Флажки и диапазоны дат
- •Оптимизация вычислений
- •Реактивные выражения
- •Зависимости
- •Оптимизация обслуживания флажка
- •Использование Shiny приложений
- •Контрольные задания
- •Разработка knitr документов Использование пакета knitr
- •Разработка r презентаций
- •Начало разработки
- •Основы формирования слайдов
- •Создание контента
- •Переходы между слайдами и навигация
- •Настройка шрифтов и внешнего вида
- •Контрольные задания
Отображение реакции объектов
Рассмотрим как осуществить автоматическое реагирование Shiny приложения на различные действия пользователя, когда он воздействует на объекты, обладающие реакцией (реактивные объекты), т.е. меняющие свои выходные значения при изменении входных воздействий.
Это делается в два этапа:
добавляются нужные реактивные объекты в пользовательский интерфейс ui.R;
пишется код сценария server.R, где для вывода используются выходные значения объектов.
Этап 1:
Shiny включает целое семейство функций вывода, которые формируют выходные значения объекта. Каждая функция формирует определенный тип выходного значения.
Функция вывода |
Выводит |
htmlOutput |
чистый HTML |
imageOutput |
изображение |
plotOutput |
график |
tableOutput |
таблица |
textOutput |
текст |
uiOutput |
чистый HTML |
verbatimTextOutput |
текст |
Выходные значения можно добавлять к пользовательскому интерфейсу аналогично тому, как добавлялись HTML элементы или виджеты. Размещать функции вывода внутри sidebarPanel() или mainPanel() в ui.R сценарии.
Например, в сценарии ui.R используется функция вывода textOutput() для добавления реакции в виде текстовой строки в основную панель mainРanel() приложения censusVis:
#ui.R
shinyUI(fluidPage(
titlePanel("censusVis"),
sidebarLayout(
sidebarPanel(
helpText("Формирование демографической карты
по данным переписи населения США 2010 года."),
selectInput("var",
label = "Выберите переменную для отображения",
choices = c("Процент белых", "Процент черных",
"Процент испанцев", "Процент азиатов"),
selected = "Процент белых"),
sliderInput("range",
label = "Диапазон интересов:",
min = 0, max = 100, value = c(0, 100))
),
mainPanel(
textOutput("text1"),
textOutput("text2")
)
)
))
Отметим, что функция textOutput() использует аргументы “text1” и “text2”. Каждая функция вывода использует один аргумент в виде строковой переменной и Shiny использует ее как имя реакции объекта.
Этап 2:
Размещая функции вывода в ui.R мы просто указываем место, где будет отображаться реакция того или иного объекта. Для отображения реакции строится код в server.R. Код должен располагаться в “безымянной” функции располагаемой внутри shinyServer() в server.R сценарии. “Безымянные” функции играют специальную роль – они позволяют выстраивать объекты друг за другом путем указания нужных аргументов. Каждый объект описывается отдельно. Имена объектов должны соответствовать именам аргументов введенных в ui.R. Например, в сценарии server.R output$text1 соответствует textOutput("text1") в скрипте ui.R:
#server.R
shinyServer(
function(input, output) {
output$text1 <- renderText({
paste("Вы выбрали: ", input$var)
})
output$text2 <- renderText({
paste("Выбран диапазон от", input$range[1], "до", input$range[2])
})
}
)
Каждое обращение к output должно осуществляться с помощью render* функций. Эти функции перехватывают R выражения и выполняют нужную предобработку. Необходимо использовать render* функции, которые соответствуют типу реакции объекта.
Render функция |
Создает |
renderImage |
изображение (сохраняет ссылку на файл) |
renderPlot |
график |
renderPrint |
вывод на печать |
renderTable |
фрейм данных, матрица, другая структурированная таблица |
renderText |
символьная строка |
renderUI |
Shiny тег объект или HTML |
Каждая render* функция имеет один аргумент: R выражение заключенное в фигурные скобки {}. Выражение может состоять из одной строки кода, а может включать много команд. Его можно рассматривать как набор инструкций данных Shiny для запоминания. Shiny запустит эти инструкции когда пользователь первый раз запустит приложение и будет перезапускать их каждый раз когда выходные значения объекта изменятся при изменении входных значений пользователем.
Для того, чтобы это работало, выражение должно возвращать правильный тип выходного значения (текст, график, фрейм данных и т.п.). В случае, если объект не возвратит значения или оно будет не соответствовать указанному типу, будет выведено сообщение об ошибке.