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
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)