LoslegenKostenlos loslegen

Verschiedene Ausgaben auf verschiedene Tabs verteilen

Tabs sind hilfreich, wenn du zu viel Inhalt hast und ihn aufteilen möchtest. Um einen Tab zu erstellen, umschließt du UI-Elemente einfach mit der Funktion tabPanel() und vergibst mit dem Argument title einen Titel für den Tab.

Damit Tabs in der UI erscheinen, müssen die Tab-Panels in einem Tabset-„Container“ gruppiert werden, indem du alle Tab-Panels in tabsetPanel() einbettest.

Deine Aufgabe ist es, der Shiny-App Tabs hinzuzufügen, sodass die Eingaben und die Download-Schaltfläche in einem Tab sind, der Plot in einem anderen Tab und die Tabelle in einem dritten Tab. Da dies ausschließlich eine visuelle Änderung ist, erfolgen alle Codeänderungen nur im UI-Teil.

Diese Übung ist Teil des Kurses

Fallstudien: Webanwendungen mit Shiny in R erstellen

Kurs anzeigen

Anleitung zur Übung

  • Verwende die Funktion tabsetPanel(), um einen Container für drei Tab-Panels zu erstellen:
    • Ein erster Tab für die Eingaben, und nenne den Tab "Inputs".
    • Ein zweiter Tab, der den Plot zeigt, und nenne den Tab "Plot" (Zeile 16).
    • Ein dritter Tab, der die Tabelle zeigt, und nenne den Tab "Table" (Zeile 21).

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

ui <- fluidPage(
    h1("Gapminder"),
    # Create a container for tab panels
    ___(
        # Create an "Inputs" tab
        tabPanel(
            title = ___,
            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")
        ),
        # Create a "Plot" tab
        ___(
            title = "Plot",
            plotOutput("plot")
        ),
        # Create "Table" tab
        ___(
            title = ___,
            DT::dataTableOutput("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
  })
  
  output$table <- DT::renderDataTable({
    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