Wybierz źródło danych (serwer)
Podczas pracy z przyciskami opcji (radio buttons) często konieczne jest zastosowanie logiki warunkowej (instrukcji if-else) przy odczytywaniu ich wartości po stronie serwera. Jest to potrzebne wtedy, gdy różne działania zależą od konkretnego wyboru – wartość musi zostać najpierw sprawdzona, zanim zdecydujesz, jak postąpić.
Na przykład w przypadku przycisków wyboru źródła danych różny kod będzie wykonywany w zależności od tego, którą opcję wybierze użytkownik.
Twoim kolejnym zadaniem jest użycie odpowiedniego źródła danych w funkcji generującej chmurę słów – zgodnie z wyborem dokonanym przez użytkownika.
To ćwiczenie jest częścią kursu
Studia przypadków: tworzenie aplikacji webowych w Shiny w R
Instrukcje do ćwiczenia
- Zdefiniuj zmienną reaktywną o nazwie
data_source, która będzie przechowywać dane używane do generowania chmury słów (wiersz 28). - Jeśli wybrana zostanie opcja „book" („Art of War"), przypisz jako źródło danych książkę
artofwar. Jeśli wybrana zostanie opcja „own" („Użyj własnych słów"), przypisz wartość z pola tekstowego. Jeśli wybrana zostanie opcja „file" („Wczytaj plik"), przypisz tekst z pliku przesłanego przez użytkownika (wiersze 33–36). - Użyj reaktywnej zmiennej
data_source()jako argumentudataw funkcji generującej chmurę słów (wiersz 51).
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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)