Shiny по-русски. Урок 3

_Рекомендую начать с урока 1 и урока 2.

#Добавьте контрольные виджеты

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

Контрольные виджеты

В Shiny определен ряд встроенных виджетов, каждый из которых создан с помощью соответствующим образом названной функции R. Например, содержится функция actionButton, которая создает кнопку действия и функция namessliderInput, которая создает ползунок (slider bar).

Вот стандартные виджеты Shiny

function widget
actionButton Action Button
checkboxGroupInput A group of check boxes
checkboxInput A single check box
dateInput A calendar to aid date selection
fileInput A file upload control wizard
helpText Help text that can be added to an input form
numericInput A field to enter numbers
radioButtons A set of radio buttons
selectInput A box with choices to select from
sliderInput A slider bar
submitButton A submit button
textInput A field to enter text

некоторые из этих виджетов построены с использованием проекта Twitter Bootstrap - популярной открытой структуры для построения пользовательских интерфейсов.

Добавление виджетов

Вы можете добавить виджет на вашу веб-страницу тем же путем, которым вы добавляли содержимое HTML в уроке 2. ЧТобы добавить свой виджет в приложение, разместите функцию виджета в соответствующую панель в код файла ui.R.

У функции каждого виджета есть несколько аргументов. Первые два аргумента для любого виджета это:

В этом примере имя виджета - “action”, а метка - “Action”:

actionButton("action", label = "Action")

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

Скрипт ui.R, размещенный ниже, создает приложение, скрин которого расположен выше. Измените свой файл ui.R приложения App-1, а затем запустите приложение.

# ui.R

shinyUI(fluidPage(
  titlePanel("Basic widgets"),

  fluidRow(

    column(3,
      h3("Buttons"),
      actionButton("action", label = "Action"),
      br(),
      br(), 
      submitButton("Submit")),

    column(3,
      h3("Single checkbox"),
      checkboxInput("checkbox", label = "Choice A", value = TRUE)),

    column(3, 
      checkboxGroupInput("checkGroup", 
        label = h3("Checkbox group"), 
        choices = list("Choice 1" = 1, 
           "Choice 2" = 2, "Choice 3" = 3),
        selected = 1)),

    column(3, 
      dateInput("date", 
        label = h3("Date input"), 
        value = "2014-01-01"))   
  ),

  fluidRow(

    column(3,
      dateRangeInput("dates", label = h3("Date range"))),

    column(3,
      fileInput("file", label = h3("File input"))),

    column(3, 
      h3("Help text"),
      helpText("Note: help text isn't a true widget,", 
        "but it provides an easy way to add text to",
        "accompany other widgets.")),

    column(3, 
      numericInput("num", 
        label = h3("Numeric input"), 
        value = 1))   
  ),

  fluidRow(

    column(3,
      radioButtons("radio", label = h3("Radio buttons"),
        choices = list("Choice 1" = 1, "Choice 2" = 2,
                       "Choice 3" = 3),selected = 1)),

    column(3,
      selectInput("select", label = h3("Select box"), 
        choices = list("Choice 1" = 1, "Choice 2" = 2,
                       "Choice 3" = 3), selected = 1)),

    column(3, 
      sliderInput("slider1", label = h3("Sliders"),
        min = 0, max = 100, value = 50),
      sliderInput("slider2", "",
        min = 0, max = 100, value = c(25, 75))
      ),

    column(3, 
      textInput("text", label = h3("Text input"), 
        value = "Enter text..."))   
  )

))

Пропробуйте как работает каждый виджет, чтобы понять, для чего он работает. Экспериментируйте с изменением значений в функциях виджетов и наблюдайте за эффектами. Если вам интересно, более подробно почитайте в макете этого приложения в руководстве по макетам (application layout guide). Этот урок не предусматривает изучение этого более сложного макета.

Теперь ваша очередь (задание)

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

Напоминание

добавлять полностью функциональные виджеты в приложения очень просто. Shiny содержит набор функций для создания этих виджетов. Каждый виджет требует своих имени иметки. Некоторые функции требуют специфических условий для их исполнения. Вы добавили в сове приложение Shiny также как и добавили различный HTML контент (см. Урок 2).

Двигаемся дальше

Галерея виджетов Shiny представляет шаблоны, которые вы можете быстро добавить в свои приложения. Чтобы использовать шаблоны, посетите галерею. Галерея отображает каждый виджет Shiny и показывает как изменяется значение виджета в ответ на изменение входных данных.

Выберите виджет и нажмите “See Code” под виджетом. Для того, чтобы использовать код, скопируйте его и вставьте в свой файл ui.R.

Помощь по заданию

# ui.R

shinyUI(fluidPage(
  titlePanel("censusVis"),

  sidebarLayout(
    sidebarPanel(
      helpText("Create demographic maps with 
        information from the 2010 US Census."),

      selectInput("var", 
        label = "Choose a variable to display",
        choices = list("Percent White", "Percent Black",
          "Percent Hispanic", "Percent Asian"),
        selected = "Percent White"),

      sliderInput("range", 
        label = "Range of interest:",
        min = 0, max = 100, value = c(0, 100))
    ),

    mainPanel()
  )
))