Kom igångKom igång gratis

Placera olika utdata på olika flikar

Flikar är användbara när du har mycket innehåll och vill dela upp det. För att skapa en flik omsluter du UI-element med funktionen tabPanel() och anger flikens namn med argumentet title.

För att flikarna ska visas i UI:t behöver fliktabellerna grupperas i en "behållare", vilket görs genom att omsluta alla fliktabeller med tabsetPanel().

Din uppgift är att lägga till flikar i Shiny-appen så att inmatningarna och nedladdningsknappen hamnar på en flik, diagrammet på en annan flik och tabellen på en tredje flik. Eftersom det här är en rent visuell förändring görs alla kodändringar enbart i UI-delen.

Den här övningen är en del av kursen

Fallstudier: Bygg webbapplikationer med Shiny i R

Visa kurs

Övningsinstruktioner

  • Använd funktionen tabsetPanel() för att skapa en behållare med tre fliktabeller:
    • En första flik för inmatningarna – ge den namnet "Inputs".
    • En andra flik som visar diagrammet – ge den namnet "Plot" (rad 16).
    • En tredje flik som visar tabellen – ge den namnet "Table" (rad 21).

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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)
Redigera och kör kod