CommencezCommencez gratuitement

Les variables réactives réduisent la duplication de code

Dans les exercices précédents, le code qui filtre gapminder selon les valeurs d'entrée est dupliqué trois fois : une fois dans le tableau, une fois dans le graphique et une fois dans le gestionnaire de téléversement.

Les variables réactives peuvent servir à réduire la duplication de code, ce qui est généralement une bonne pratique, car cela facilite la maintenance.

Cette activité fait partie du cours

Études de cas : créer des applications Web avec Shiny en R

Voir le cours

Instructions de l’exercice

Les extraits de code dupliqués qui filtrent les données ont été retirés. Votre tâche est d'ajouter une variable réactive qui filtre les données et d'utiliser cette variable à la place. Plus précisément :

  • Créez une variable réactive nommée filtered_data avec la fonction reactive() en reprenant le code de filtrage de l'exercice précédent (ligne 15).
  • Utilisez la variable réactive pour produire le tableau, le graphique et le fichier à télécharger (lignes 33, 42 et 50).

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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)
Modifier et exécuter le code