CommencerCommencer gratuitement

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

Dans les exercices précédents, le code qui filtre gapminder en fonction des valeurs saisies est dupliqué trois fois : une fois dans le tableau, une fois dans le graphique et une fois dans le gestionnaire de téléchargement.

Les variables réactives peuvent être utilisées pour réduire la duplication de code, ce qui est généralement une bonne idée car cela facilite la maintenance.

Cet exercice fait partie du cours

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

Afficher le cours

Instructions

Les blocs de code dupliqués qui filtrent les données ont été supprimés. Votre tâche est d’ajouter une variable réactive qui filtre les données, puis d’utiliser cette variable à la place. Plus précisément :

  • Créez une variable réactive nommée filtered_data à l’aide de la fonction reactive() qui reprend le code de filtrage de l’exercice précédent (ligne 15).
  • Utilisez la variable réactive pour générer la sortie du tableau, la sortie du graphique et le fichier à télécharger (lignes 33, 42 et 50).

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

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