Aan de slagBegin gratis

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

Bekijk cursus

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)
Code bewerken en uitvoeren