Aan de slagBegin gratis

Voeg een continentkiezer toe: select input

Als er veel opties zijn waaruit de gebruiker kan kiezen, nemen keuzerondjes veel ruimte in en zijn ze niet altijd ideaal. Select inputs—ook wel ‘dropdownlijsten’—kun je gebruiken om de gebruiker een optie uit een lijst te laten kiezen, maar dan compacter. Met een select input verschijnen alle opties in een scrollbare lijst, dus dit werkt ook goed als je veel keuzes hebt.

Net als keuzerondjes hebben select inputs ook choices- en selected-parameters. Daarnaast hebben select inputs een multiple-argument waarmee, als het op TRUE staat, de gebruiker meer dan één waarde kan selecteren.

De code voor de Shiny-app uit de vorige oefening is meegeleverd met kleine aanpassingen.

Deze oefening maakt deel uit van de cursus

Casestudies: webapplicaties bouwen met Shiny in R

Bekijk cursus

Oefeninstructies

  • Voeg een selectInput() toe aan de UI met ID "continents" en het label "Continents", met standaardcontinent "Europe".
    • De keuzes in de lijst moeten alle verschillende continenten zijn die in de gapminder-gegevensset voorkomen.
    • Sta toe dat de gebruiker meerdere continenten tegelijk kan selecteren.
  • Voeg code toe aan de server zodat alleen gegevens voor de geselecteerde continenten worden getoond, door de gapminder-gegevensset te subsetten (regel 23).

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      textInput("title", "Title", "GDP vs life exp"),
      numericInput("size", "Point size", 1, 1),
      checkboxInput("fit", "Add line of best fit", FALSE),
      radioButtons("color", "Point color",
                   choices = c("blue", "red", "green", "black")),
      # Add a continent dropdown selector
      ___(___, ___,
                  choices = levels(___),
                  multiple = ___,
                  selected = ___)
    ),
    mainPanel(
      plotOutput("plot")
    )
  )
)

# Define the server logic
server <- function(input, output) {
  output$plot <- renderPlot({
    # Subset the gapminder dataset by the chosen continents
    data <- subset(gapminder,
                   ___ %in% ___$continents)

    p <- ggplot(data, aes(gdpPercap, lifeExp)) +
      geom_point(size = input$size, col = input$color) +
      scale_x_log10() +
      ggtitle(input$title)
    
    if (input$fit) {
      p <- p + geom_smooth(method = "lm")
    }
    p
  })
}

shinyApp(ui = ui, server = server)
Code bewerken en uitvoeren