Wähle die Datenquelle (Server)
Wenn du mit Radio-Schaltflächen arbeitest, brauchst du im Server-Teil manchmal bedingte Logik (if-else-Anweisungen), um auf den Wert der Radio-Schaltfläche zuzugreifen. Das ist nötig, wenn je nach Auswahl unterschiedliche Aktionen ausgeführt werden und der gewählte Wert geprüft werden muss, bevor es weitergeht.
Bei den Radio-Schaltflächen zur Auswahl der Datenquelle soll zum Beispiel je nach Auswahl anderer Code laufen.
Deine nächste Aufgabe ist, je nach Radio-Auswahl die passende Datenquelle in der Wortwolkenfunktion zu verwenden.
Diese Übung ist Teil des Kurses
Fallstudien: Webanwendungen mit Shiny in R erstellen
Anleitung zur Übung
- Definiere eine reaktive Variable namens
data_source, die die Daten hält, die für die Wortwolke verwendet werden (Zeile 28). - Wenn die Option „book“ („Art of War“) ausgewählt ist, weise das Buch
artofwarals Datenquelle zu. Wenn die Option „own“ („Use your own words“) ausgewählt ist, weise den Wert des Textbereichs als Datenquelle zu. Wenn die Option „file“ („Upload a file“) ausgewählt ist, weise den Text aus einer vom Nutzer hochgeladenen Datei als Datenquelle zu (Zeilen 33 bis 36). - Verwende die reaktive Variable
data_source()alsdata-Argument für die Wortwolkenfunktion (Zeile 51).
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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)