ÎncepețiÎncepe gratuit

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

Vezi cursul

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)
Editează și rulează codul