CommencerCommencer gratuitement

Télécharger les données filtrées

Le téléchargement de fichiers se fait grâce au duo de fonctions downloadButton() et downloadHandler(). Ces deux fonctions fonctionnent ensemble de façon similaire au couple output/render : downloadButton() détermine l’emplacement dans l’interface, tandis que downloadHandler() doit être enregistré dans la liste output et contient le code R qui crée le fichier à télécharger.

Cet exercice fait partie du cours

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

Afficher le cours

Instructions

Ajoutez la possibilité de télécharger, au format CSV, les données actuellement affichées dans le tableau. Plus précisément :

  • Ajoutez un bouton de téléchargement dans l’UI avec l’ID "download_data" et l’étiquette "Download".
  • Ajoutez un gestionnaire de téléchargement côté serveur (ligne 31).
  • Donnez au fichier téléchargé le nom "gapminder_data.csv" (ligne 33).
  • Écrivez les données filtrées dans un fichier CSV (ligne 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))),
  # Add a download button
  ___(outputId = ___, label = ___),
  plotOutput("plot"),
  tableOutput("table")
)

server <- function(input, output) {
  output$table <- renderTable({
    data <- gapminder
    data <- subset(
      data,
      lifeExp >= input$life[1] & lifeExp <= input$life[2]
    )
    if (input$continent != "All") {
      data <- subset(
        data,
        continent == input$continent
      )
    }
    data
  })

  # Create a download handler
  output$download_data <- ___(
    # The downloaded file is named "gapminder_data.csv"
    filename = ___,
    content = function(file) {
      # The code for filtering the data is copied from the
      # renderTable() function
      data <- gapminder
      data <- subset(
        data,
        lifeExp >= input$life[1] & lifeExp <= input$life[2]
      )
      if (input$continent != "All") {
        data <- subset(
          data,
          continent == input$continent
        )
      }
      
      # Write the filtered data into a CSV file
      write.csv(___, file, row.names = FALSE)
    }
  )

  output$plot <- renderPlot({
    data <- gapminder
    data <- subset(
      data,
      lifeExp >= input$life[1] & lifeExp <= input$life[2]
    )
    if (input$continent != "All") {
      data <- subset(
        data,
        continent == input$continent
      )
    }
    ggplot(data, aes(gdpPercap, lifeExp)) +
      geom_point() +
      scale_x_log10()
  })
}

shinyApp(ui, server)
Modifier et exécuter le code