Статьи

Shiny and R: Как добавить темы и настроить сообщения об ошибках

R Блестящие темы и сообщения об ошибках

Цель Shiny — предоставить интуитивно понятный и удобный интерфейс для R. R — очень популярная статистическая среда для анализа тяжелых данных и построения статистических моделей, и поэтому она очень популярна среди ученых-данных. Однако для пользователя с некодирующим фоном использование R для проведения такого анализа может стать довольно интенсивным. Именно здесь приходят Shiny Web Apps. По сути, Shiny обеспечивает более интуитивно понятный графический интерфейс пользователя, который все еще способен выполнять сложный анализ данных — без необходимости обширного кодирования со стороны конечного пользователя.

В моей статье об использовании Shiny с R и HTML я проиллюстрировал, как можно создать интерактивное веб-приложение для проведения анализа без необходимости прямого манипулирования кодом. В этой статье я буду использовать немного другую модель, чтобы проиллюстрировать, как можно настроить среду Shiny для более удобной работы с конечным пользователем. По сути, цель этой статьи — показать, как пользователь может:

  1. Создайте приложение, связав пользовательский интерфейс и серверную часть
  2. Как настроить темы, доступные в библиотеке Shiny Themes
  3. Внедрить сообщения об ошибках, чтобы предоставить конечному пользователю руководство по использованию конкретной программы.

Сама программа, разработанная для этого руководства, довольно проста: ввод с помощью ползунка позволяет пользователю манипулировать переменной внутри программы посредством реактивности, что вызывает мгновенные изменения в выводе линейного графика, который разрабатывается посредством реактивности.

Эта встроенная функция дает Shiny значительное преимущество перед использованием кода R в качестве автономного. Традиционно, чтобы проанализировать изменение в конкретной переменной, необходимо напрямую манипулировать кодом (или данными, из которых код читает), и это в конечном итоге может стать очень неэффективным. Однако Shiny значительно ускоряет этот процесс, позволяя пользователю манипулировать переменными интуитивно понятным способом, и изменения отражаются мгновенно.

Однако вся цель Shiny — сделать скрипт R максимально интерактивным . В связи с этим пользователь захочет добавить в программу функции, которые выходят далеко за рамки реактивности. Два таких аспекта, которые я буду обсуждать в этом уроке:

  1. Использование shinythemes
  2. Создание функции validate()

Блестящие Темы

В пользовательском интерфейсе нашей исходной программы мы не указали тему и поэтому получили довольно простое (по умолчанию Bootstrap) представление нашего вывода:

по умолчанию блестящий вид приложения

Когда мы определили shinyUI(fluidPage(…)) В этом случае мы собираемся указать несколько тем, доступных в пакете Shiny Themes .

После того, как мы определили shinyUI(fluidPage(…))

 shinyUI(fluidPage(theme = shinytheme("cyborg")

тема киборга

Из вышесказанного мы видим, что выбор темы Киборг дает нашему веб-приложению темный фон. В качестве другого примера, давайте теперь выберем тему Spacelab и посмотрим, что мы придумали:

тема космического корабля

Эти темы демонстрируют больше уровней настройки в зависимости от других атрибутов в коде Shiny, таких как дополнительные кнопки, вкладки и т. Д. Не стесняйтесь экспериментировать с другими темами в учетной записи RStudio GitHub и посмотрите, что у вас получится!

функция validate ()

Функция validate является незаменимым инструментом для работы с Shiny-кодом. По сути, validate позволяет запускать предупреждающее сообщение при манипулировании определенной частью Shiny-программы.

В этом конкретном случае я обсуждаю, как мы можем использовать функции validateneed

Сама программа, как и в прошлый раз, довольно проста с точки зрения своей функции. По сути, наша программа Shiny выдает значение по оси X в диапазоне от 1 до 100 в зависимости от значения, выбранного ползунком.

Затем мы используем соответствующее значение y для создания сообщения об ошибке всякий раз, когда рассчитанный наклон падает ниже 5, то есть при значении 29 или выше. Обратите внимание, что программа не рассчитывает наклон непосредственно, но вместо этого пользователь в этом случае использует значение 29 в качестве точки отсечения для этого наклона на основе ручного расчета.

В пользовательском интерфейсе мы указываем триггер валидации под нашим световым интерфейсом следующим образом:

 shinyUI(fluidPage(theme = shinytheme("spacelab"),
tags$head(
  tags$style(HTML("
    .shiny-output-error-validation {
    color: red;
    }
    "))
),

Под сервером мы указываем команды validateneedinput-output

 function(input, output) {
  output$algebra < - renderPlot({
    validate(
      need(input$lambda <= 28, "A value set at 29 or above produces a slope below 5. Please set a value below 29.")
    )

Полный код программы

Код пользовательского интерфейса и сервера в целом отображается ниже:

UI

 #Load libraries
library(shiny)
library(shinythemes)


#Define Shiny theme and specify shiny-output-error-validation
shinyUI(fluidPage(theme = shinytheme("spacelab"),


tags$head(
  tags$style(HTML("
    .shiny-output-error-validation {
    color: red;
    }
    "))
),


sidebarLayout(
  sidebarPanel(
    sliderInput("lambda",
      "Number of data points:",
      min = 1,
      max = 100,
      value = 1)
),


mainPanel(
  h3("Slope of a line", style = "font-family: 'Jura'; color: blue; font-size: 32px;"),
  HTML("<p>Excluding slope below 5 where y = 2x + 3"),
  plotOutput("algebra")
)
)
))

сервер

 #Load libraries
library(shiny)
library(ggplot2)
library(scales)


#Define validate function
function(input, output) {
  output$algebra <- renderPlot({
    validate(
      need(input$lambda <= 28, "A value set at 29 or above produces a slope below 5. Please set a value below 29.")
    )


#Define y as 2x+3 (using lambda to represent x variable)
    n <- 1:100
    lambda <- seq(min(n), max(n), length.out = input$lambda)
    plot((2*lambda)+3, type = "o", col = 'blue',
         fg = 'blue', xlab= "X (number of data points)", ylab = "Y = 2x+3")
  })
}

В качестве краткого резюме, мы запускаем программу:

  • Открываем R Studio и выбираем New IconShiny Web App

открытие нового блестящего приложения

  • Мы видим, что тогда у нас есть возможность выбрать один файл (с UI.Rserver.RUI.Rserver.R Мы будем использовать несколько файлов здесь.

выбор нескольких файлов

  • Теперь мы вставляем вышеуказанные пользовательский интерфейс и серверные коды в соответствующие разделы и запускаем программу, выбрав « Запустить приложение» .

запуск приложения

Мы видим, что наш линейный график растет в точках данных на оси X в зависимости от того, как мы манипулируем ползунком. Однако вы заметите, что как только ползунок переместится на значение 29 или выше, появится сообщение об ошибке: «Значение, установленное на 29 или выше, создает наклон ниже 5. Пожалуйста, установите значение ниже 29» .

отображение сообщения об ошибке

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

Например, сам сайт Shiny дает пример того, как функция validate Пользовательский интерфейс и сервер выдают гистограмму в качестве выходных данных, но программа выдает сообщение об ошибке, когда в списке выбран конкретный набор данных. Таким образом, команда validateneedinput$lambda <= 28«Значение установлено на 29 или выше дает наклон ниже 5. Пожалуйста, установите значение ниже 29. «

Более того, хотя мы указали только одно сообщение об ошибке, мы могли бы указать несколько. Например, давайте теперь предположим, что мы хотим отобразить дополнительное сообщение об ошибке, когда значение ползунка превышает 35:

 function(input, output) {
  output$algebra <- renderPlot({
    validate(
      need(input$lambda <= 28, "A value set at 29 or above produces a slope below 5. Please set a value below 29."),
      need(input$lambda <= 35, "Your slider is now at a value greater than 35!")
    )

Использование дополнительной функции need«Ваш ползунок теперь имеет значение больше 35!»

выделенное сообщение об ошибке

Вывод

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

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