Aan de slagBegin gratis

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

Bekijk cursus

Oefeninstructies

  • Definieer een reactieve variabele data_source om 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 artofwar toe 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 het data-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)
Code bewerken en uitvoeren