Выбор источника данных (сервер)
При работе с переключателями иногда необходимо использовать условную логику (конструкции 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)