ComenzarEmpieza gratis

Las variables reactivas reducen la duplicación de código

En los ejercicios anteriores, el código que filtra gapminder según los valores de entrada está duplicado tres veces: una en la tabla, otra en el gráfico y otra en el manejador de descarga.

Las variables reactive pueden usarse para reducir la duplicación de código, lo cual en general es una buena idea porque facilita el mantenimiento.

Este ejercicio forma parte del curso

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

Ver curso

Instrucciones del ejercicio

Se han eliminado los fragmentos de código duplicados que filtraban los datos. Tu tarea es añadir una variable reactiva que filtre los datos y usar esta variable en su lugar. En concreto:

  • Crea una variable reactiva llamada filtered_data usando la función reactive() que emplee el código de filtrado del ejercicio anterior (línea 15).
  • Usa la variable reactiva para generar la salida de la tabla, la salida del gráfico y el archivo de descarga (líneas 33, 42 y 50).

Ejercicio interactivo práctico

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

ui <- fluidPage(
  h1("Gapminder"),
  sliderInput(inputId = "life", label = "Life expectancy",
              min = 0, max = 120,
              value = c(30, 50)),
  selectInput("continent", "Continent",
              choices = c("All", levels(gapminder$continent))),
  downloadButton(outputId = "download_data", label = "Download"),
  plotOutput("plot"),
  tableOutput("table")
)

server <- function(input, output) {
  # Create a reactive variable named "filtered_data"
  filtered_data <- ___({
    # Filter the data (copied from previous exercise)
    data <- gapminder
    data <- subset(
      data,
      lifeExp >= input$life[1] & lifeExp <= input$life[2]
    )
    if (input$continent != "All") {
      data <- subset(
        data,
        continent == input$continent
      )
    }
    data
  })
  
  output$table <- renderTable({
    # Use the filtered_data variable to render the table output
    data <- ___
    data
  })

  output$download_data <- downloadHandler(
    filename = "gapminder_data.csv",
    content = function(file) {
      # Use the filtered_data variable to create the data for
      # the downloaded file
      data <- ___
      write.csv(data, file, row.names = FALSE)
    }
  )

  output$plot <- renderPlot({
    # Use the filtered_data variable to create the data for
    # the plot
    data <- ___
    ggplot(data, aes(gdpPercap, lifeExp)) +
      geom_point() +
      scale_x_log10()
  })
}

shinyApp(ui, server)
Editar y ejecutar código