Plaats verschillende resultaten op verschillende tabs
Tabs zijn handig als je te veel inhoud hebt en die wilt opsplitsen. Om een tab te maken, wikkel je UI-elementen in de functie tabPanel(), en geef je met het argument title een titel aan de tab.
Opdat tabs in de UI verschijnen, moeten de tabpanelen worden gegroepeerd in een tabset-"container", door alle tabpanelen te omhullen met tabsetPanel().
Je taak is om tabs toe te voegen aan de Shiny-app, zodat de inputs en downloadknop in één tab staan, de plot in een andere tab, en de tabel in een derde tab. Omdat dit puur een visuele wijziging is, voer je alle codewijzigingen alleen uit in het UI-gedeelte.
Deze oefening maakt deel uit van de cursus
Casestudies: webapplicaties bouwen met Shiny in R
Oefeninstructies
- Gebruik de functie
tabsetPanel()om een container te maken voor drie tabpanelen:- Een eerste tab voor de inputs, en noem de tab "Inputs".
- Een tweede tab die de plot toont, en noem de tab "Plot" (regel 16).
- Een derde tab die de tabel toont, en noem de tab "Table" (regel 21).
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
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)