Rendre le tableau interactif
Les tableaux dynamiques du paquet DT sont 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 tableaux DT avec deux simples modifications au code : au lieu d'utiliser tableOutput() et renderTable(), utilisez DT::dataTableOutput() et DT::renderDataTable(). Les tableaux DT offrent un large éventail d'options de personnalisation, mais nous n'en utiliserons aucune ici.
Notez qu'avec le paquet DT, la convention est de ne pas charger le paquet DT et d'utiliser plutôt le préfixe DT:: pour appeler les fonctions de tableau.
Cette activité fait partie du cours
Études de cas : créer des applications Web avec Shiny en R
Instructions de l’exercice
Le code de l'application Shiny du dernier exercice de programmation est fourni tel quel, sans modification. Votre tâche est de remplacer le tableau Shiny de base par un tableau DT. Plus précisément :
- Dans l'interface (UI), remplacez la fonction d'affichage du tableau par l'affichage du tableau
DT(ligne 11). - Dans le serveur, remplacez la fonction de rendu du tableau par la fonction de rendu du tableau
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)