Inizia subitoInizia gratis

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

Visualizza corso

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)
Modifica ed esegui il codice