Rendi la tabella interattiva
Le datatable del pacchetto DT sono spesso un modo migliore per visualizzare i dati in un'app Shiny rispetto alle tabelle integrate. Le tabelle Shiny possono essere convertite in datatable con due semplici modifiche al codice: invece di usare tableOutput() e renderTable(), usa DT::dataTableOutput() e DT::renderDataTable(). Le datatable offrono un'ampia gamma di opzioni di personalizzazione, ma qui non useremo alcuna opzione speciale.
Nota: con il pacchetto DT, la convenzione è di non caricare il pacchetto DT, ma di usare il prefisso DT:: quando richiami le funzioni delle datatable.
Questo esercizio fa parte del corso
Casi di studio: creare applicazioni web con Shiny in R
Istruzioni dell'esercizio
Il codice dell'app Shiny dell'ultimo esercizio di programmazione è fornito senza modifiche. Il tuo compito è sostituire la tabella base di Shiny con una tabella DT. In particolare:
- Nell'UI, sostituisci la funzione di output della tabella con l'output della datatable di
DT(riga 11). - Nel server, sostituisci la funzione di rendering della tabella con la funzione di rendering della datatable di
DT(riga 31).
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
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)