Lägg till ett kontinentval: select input
När det finns många alternativ att välja bland kan alternativknappar ta upp mycket plats och vara mindre lämpliga. Select inputs – även kallade "rullgardinslistor" – kan också användas för att låta användaren välja ett alternativ från en lista, men på ett mer kompakt sätt. Med en select input visas alla alternativ i en rullningsbar lista, vilket fungerar bra även när det finns många val.
Precis som alternativknappar har select inputs parametrarna choices och selected. Dessutom har select inputs ett multiple-argument, som när det sätts till TRUE tillåter användaren att välja mer än ett värde.
Koden för Shiny-appen från föregående övning tillhandahålls med mindre ändringar.
Den här övningen är en del av kursen
Fallstudier: Bygg webbapplikationer med Shiny i R
Övningsinstruktioner
- Lägg till ett
selectInput()i UI:t med ID:t "continents" och etiketten "Continents", med "Europe" som standardkontinent.- Alternativen i listan ska vara alla olika kontinenter som finns i gapminder-datamängden.
- Tillåt användaren att välja flera kontinenter samtidigt.
- Lägg till kod i servern så att bara data för den valda kontinenten visas, genom att ta ut ett delmängd ur gapminder-datamängden (rad 23).
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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)