CommencerCommencer 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

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

Afficher le cours

Instructions

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 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("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