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

Shiny - пакет от RStudio, позволяющий невероятно легко создавать интерактивные веб-приложения на языке R.

Ниже приведен перевод оригинально обучающего курса обучающего руководства на русском языке. Местами авторски мною адоптированный). Изображения взяты с оригинального курса.

Особенности Shiny

Установка

Пакет Shiny доступен на репозитарии CRAN, так что его можно установить прямо с консоли R

install.packages("shiny")

Урок 1

Hello, Shiny - это пример простого приложения, которое генерирует случайное распределение на основании числа наблюдений и затем строит его.

alt text Для запуска примера используйте код:

library(shiny)
runExample("01_hello")

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

Пользовательский интерфейс определен в исходном файле ui.R:

##ui.R
library(shiny)

# Define UI for application that draws a histogram
shinyUI(fluidPage(

  # Application title
  titlePanel("Hello Shiny!"),

  # Sidebar with a slider input for the number of bins
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 30)
    ),

    # Show a plot of the generated distribution
    mainPanel(
      plotOutput("distPlot")
    )
  )
))

На серверная сторона приложения показана ниже.

library(shiny)

# Define server logic required to draw a histogram
shinyServer(function(input, output) {

  # Expression that generates a histogram. The expression is
  # wrapped in a call to renderPlot to indicate that:
  #
  #  1) It is "reactive" and therefore should be automatically
  #     re-executed when inputs change
  #  2) Its output type is a plot

  output$distPlot <- renderPlot({
    x    <- faithful[, 2]  # Old Faithful Geyser data
    bins <- seq(min(x), max(x), length.out = input$bins + 1)

    # draw the histogram with the specified number of bins
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })

})

С одной стороны, это очень просто, случайное распределение создается для необходимого количества наблюдений, а затем строится график в виде гистограммы. Тем не менее, вы также заметите, что функция, которая возвращает график, завернута в вызов renderPlot. Комментарий ниже функции объясняет немного об этом: функция построения гистограммы “завернута” в renderPlot, чтобы показать, что: 1) она реактивная и поэтому должна быть автоматически пере-выполнена при изменении входных данных; 2) выход данной функции по типу является графиком

Но если оно показалось вам запутанным - не волнуйтесь. Мы будем обсуждать эту концепцию более детально далее.

Для того, чтобы создать собственное приложение с помощью Shine необходимо создать в рабочей папке новую папку и назвать ее именем создаваемого приложения. В папке приложения необходимо создать два документа ui.R и server.R. Например, можно скопировать содержание этих документов из вышеописанного примера. Путем изменнений в этих документах можно контроллировать приложение: переименуем заголовок или изменим цвет гистограммы.

Запустить созданное приложение можно: 1)через функцию runApp(“application_name”) 2)через кнопку Run (расположена в верхнем правом углу редактора) при открытом файле приложения.

Чтобы закрыть приложение нужно закрыть окно или Esc (Stop на консоли).

Другие примеры приложений:

system.file("examples", package="shiny")

runExample("01_hello") # a histogram
runExample("02_text") # tables and data frames
runExample("03_reactivity") # a reactive expression
runExample("04_mpg") # global variables
runExample("05_sliders") # slider bars
runExample("06_tabsets") # tabbed panels
runExample("07_widgets") # help text and submit buttons
runExample("08_html") # Shiny app built from HTML
runExample("09_upload") # file upload wizard
runExample("10_download") # file download wizard
runExample("11_timer") # an automated timer

Напоминание

Для того, чтобы создать приложение Shiny нужно: