Zacznij terazZacznij za darmo

Spraw, by tabela była interaktywna

Tabele danych z pakietu DT to często lepszy sposób wyświetlania danych w aplikacji Shiny niż wbudowane tabele. Zwykłe tabele Shiny możesz łatwo przekształcić w tabele DT za pomocą dwóch prostych zmian w kodzie: zamiast tableOutput() i renderTable() używasz DT::dataTableOutput() i DT::renderDataTable(). Tabele DT oferują wiele opcji personalizacji, ale w tym ćwiczeniu nie będziemy korzystać z żadnych specjalnych ustawień.

Uwaga: zgodnie z konwencją pakietu DT, nie wczytujemy go za pomocą library(), lecz odwołujemy się do jego funkcji za pomocą prefiksu DT::.

To ćwiczenie jest częścią kursu

Studia przypadków: tworzenie aplikacji webowych w Shiny w R

Zobacz kurs

Instrukcje do ćwiczenia

Poniżej znajdziesz kod aplikacji Shiny z poprzedniego ćwiczenia – bez żadnych zmian. Twoim zadaniem jest zastąpienie zwykłej tabeli Shiny tabelą z pakietu DT. Konkretnie:

  • W UI zastąp funkcję wyświetlającą tabelę odpowiednikiem z pakietu DT (wiersz 11).
  • W serwerze zastąp funkcję renderującą tabelę odpowiednikiem z pakietu DT (wiersz 31).

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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)
Edytuj i uruchom kod