НачатьНачать бесплатно

Выбор источника данных (сервер)

При работе с переключателями иногда необходимо использовать условную логику (конструкции if-else) при обращении к значению переключателя на сервере. Это нужно в тех случаях, когда в зависимости от выбранного варианта выполняются разные действия и перед принятием решения требуется проверить текущее значение.

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

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

Это упражнение является частью курса

Примеры использования: создание веб-приложений с Shiny в R

Посмотреть курс

Инструкции к упражнению

  • Определите реактивную переменную data_source, которая будет хранить данные для облака слов (строка 28).
  • Если выбран вариант "book" («Искусство войны»), назначьте книгу artofwar источником данных. Если выбран вариант "own" («Введите свой текст»), используйте значение текстового поля. Если выбран вариант "file" («Загрузить файл»), используйте текст из загруженного пользователем файла (строки 33–36).
  • Передайте реактивную переменную data_source() в качестве аргумента data в функцию генерации облака слов (строка 51).

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

ui <- fluidPage(
  h1("Word Cloud"),
  sidebarLayout(
    sidebarPanel(
      radioButtons(
        inputId = "source",
        label = "Word source",
        choices = c(
          "Art of War" = "book",
          "Use your own words" = "own",
          "Upload a file" = "file"
        )
      ),
      textAreaInput("text", "Enter text", rows = 7),
      fileInput("file", "Select a file"),
      numericInput("num", "Maximum number of words",
                   value = 100, min = 5),
      colourInput("col", "Background color", value = "white")
    ),
    mainPanel(
      wordcloud2Output("cloud")
    )
  )
)

server <- function(input, output) {
  # Create a "data_source" reactive variable
  data_source <- ___({
    # Return the appropriate data source depending on
    # the chosen radio button
    if (input$source == "book") {
      data <- artofwar
    } else if (input$source == ___) {
      data <- input$___
    } else if (___ == "file") {
      data <- input_file()
    }
    return(data)
  })

  input_file <- reactive({
    if (is.null(input$file)) {
      return("")
    }
    readLines(input$file$datapath)
  })

  output$cloud <- renderWordcloud2({
    # Use the data_source reactive variable as the data
    # in the word cloud function
    create_wordcloud(data = ___(), num_words = input$num,
                     background = input$col)
  })
}

shinyApp(ui = ui, server = server)
Редактировать и запускать код