Transformă tabelul în interactiv
Tabelele de tip datatable din pachetul DT sunt adesea o modalitate mai bună de a afișa date într-o aplicație Shiny față de tabelele integrate. Tabelele Shiny pot fi convertite în datatables prin două modificări simple de cod: în loc să folosești tableOutput() și renderTable(), utilizezi DT::dataTableOutput() și DT::renderDataTable(). Datatables oferă o gamă largă de opțiuni de personalizare, dar în acest exercițiu nu vom folosi nicio opțiune specială.
Reține că, în cazul pachetului DT, convenția este să nu încarci pachetul DT explicit, ci să folosești prefixul DT:: atunci când apelezi funcțiile de tip datatable.
Acest exercițiu face parte din cursul
Studii de caz: Construirea aplicațiilor web cu Shiny în R
Instrucțiuni pentru exercițiu
Codul aplicației Shiny din ultimul exercițiu de programare este furnizat fără nicio modificare. Sarcina ta este să înlocuiești tabelul Shiny de bază cu un tabel DT. Mai exact:
- În UI, înlocuiește funcția de afișare a tabelului cu funcția de afișare datatable din
DT(linia 11). - În server, înlocuiește funcția de randare a tabelului cu funcția de randare datatable din
DT(linia 31).
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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)