ComenzarEmpieza gratis

Añade un selector de continentes: select input

Cuando hay muchas opciones para que el usuario elija, los botones de opción pueden ocupar mucho espacio y no ser ideales. Los select inputs —también llamados «listas desplegables»— permiten pedir al usuario que elija una opción de una lista de manera más compacta. Con un select input, todas las opciones aparecen en una lista desplazable, por lo que se puede usar incluso si tienes muchas alternativas.

De forma similar a los botones de opción, los select inputs también tienen parámetros choices y selected. Además, los select inputs tienen el argumento multiple que, cuando se establece en TRUE, permite al usuario seleccionar más de un valor.

Se proporciona el código de la app de Shiny del ejercicio anterior con ligeras modificaciones.

Este ejercicio forma parte del curso

Casos prácticos: crea aplicaciones web con Shiny en R

Ver curso

Instrucciones del ejercicio

  • Añade un selectInput() a la UI con ID "continents" y etiqueta "Continents", con el continente predeterminado establecido en "Europe".
    • Las opciones de la lista deben ser todos los continentes que existen en el conjunto de datos gapminder.
    • Permite que el usuario seleccione varios continentes simultáneamente.
  • Añade código en el servidor para que solo se muestren los datos del continente seleccionado, filtrando el conjunto de datos gapminder (línea 23).

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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)
Editar y ejecutar código