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
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)