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
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)