LoslegenKostenlos starten

Mach die Tabelle interaktiv

Datatables aus dem Paket DT sind oft die bessere Wahl, um Daten in einer Shiny-App anzuzeigen, verglichen mit den eingebauten Tabellen. Shiny-Tabellen lassen sich mit zwei einfachen Codeänderungen in Datatables umwandeln: Statt tableOutput() und renderTable() verwendest du DT::dataTableOutput() und DT::renderDataTable(). Datatables bieten zahlreiche Möglichkeiten zur Anpassung, aber wir werden hier keine speziellen Optionen nutzen.

Beachte, dass es beim Paket DT üblich ist, das Paket nicht zu laden, sondern beim Aufruf der Datatable-Funktionen das Präfix DT:: zu verwenden.

Diese Übung ist Teil des Kurses

<Kurs>Fallstudien: Webanwendungen mit Shiny in R erstellen</Kurs>
Kurs ansehen

Übungsanweisungen

Der Code für die Shiny-App aus der letzten Programmieraufgabe wird ohne Änderungen bereitgestellt. Deine Aufgabe ist es, die einfache Shiny-Tabelle durch eine DT-Tabelle zu ersetzen. Konkret:

  • Ersetze im UI die Tabellen-Ausgabefunktion durch die DT-Datatable-Ausgabe (Zeile 11).
  • Ersetze im Server die Tabellendarstellung durch eine DT-Datatable-Renderfunktion (Zeile 31).

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

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)
Code bearbeiten und ausführen