CommencerCommencez gratuitement

Rendre le tableau interactif

Les datatables du package DT offrent souvent une meilleure façon d’afficher des données dans une application Shiny que les tableaux intégrés. Vous pouvez convertir des tableaux Shiny en datatables avec deux modifications simples : au lieu d’utiliser tableOutput() et renderTable(), utilisez DT::dataTableOutput() et DT::renderDataTable(). Les datatables proposent de nombreuses options de personnalisation, mais nous n’en utiliserons aucune ici.

Notez qu’avec le package DT, la convention est de ne pas charger explicitement le package et d’utiliser le préfixe DT:: lors de l’appel aux fonctions de datatable.

Cet exercice fait partie du cours

<cours>Études de cas : créer des applications web avec Shiny en R</cours>
Voir le cours

Instructions de l’exercice

Le code de l’application Shiny du dernier exercice de code est fourni sans modification. Votre objectif est de remplacer le tableau Shiny de base par un tableau DT. Plus précisément :

  • Dans l’UI, remplacez la fonction d’affichage du tableau par la sortie de datatable DT (ligne 11).
  • Dans le serveur, remplacez la fonction de rendu du tableau par la fonction de rendu de datatable DT (ligne 31).

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("download_data"),
  plotOutput("plot"),
  # Replace the tableOutput() with DT's version
  tableOutput("table")
)

server <- function(input, output) {
  filtered_data <- reactive({
    data <- gapminder
    data <- subset(
      data,
      lifeExp >= input$life[1] & lifeExp <= input$life[2]
    )
    if (input$continent != "All") {
      data <- subset(
        data,
        continent == input$continent
      )
    }
    data
  })
  
  # Replace the renderTable() with DT's version
  output$table <- renderTable({
    data <- filtered_data()
    data
  })

  output$download_data <- downloadHandler(
    filename = "gapminder_data.csv",
    content = function(file) {
      data <- filtered_data()
      write.csv(data, file, row.names = FALSE)
    }
  )

  output$plot <- renderPlot({
    data <- filtered_data()
    ggplot(data, aes(gdpPercap, lifeExp)) +
      geom_point() +
      scale_x_log10()
  })
}

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