Kies de gegevensbron (server)
Bij het werken met keuzerondoknoppen heb je soms voorwaardelijke logica (if-else-statements) nodig wanneer je de waarde van de knop in de server gebruikt. Dat is nodig als er verschillende acties worden uitgevoerd afhankelijk van de gekozen optie, en je de gekozen waarde wilt controleren voordat je beslist hoe je verdergaat.
Bijvoorbeeld: met de keuzerondoknoppen voor het selecteren van een gegevensbron moet er andere code draaien afhankelijk van welke keuze is geselecteerd.
Je volgende taak is om de juiste gegevensbron in de wordcloud-functie te gebruiken, afhankelijk van welke keuzerondoknop de gebruiker kiest.
Deze oefening maakt deel uit van de cursus
Casestudies: webapplicaties bouwen met Shiny in R
Oefeninstructies
- Definieer een reactieve variabele
data_sourceom de gegevens vast te houden die voor de wordcloud worden gebruikt (regel 28). - Als de optie "book" ("Art of War") is geselecteerd, wijs dan het boek
artofwartoe als gegevensbron. Als de optie "own" ("Gebruik je eigen woorden") is geselecteerd, wijs dan de waarde van het tekstgebied toe als gegevensbron. Als de optie "file" ("Upload een bestand") is geselecteerd, wijs dan de tekst uit een door de gebruiker geüpload bestand toe als gegevensbron (regels 33 tot en met 36). - Gebruik de reactieve variabele
data_source()als hetdata-argument voor de wordcloud-functie (regel 51).
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
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)