ÎncepețiÎncepe gratuit

Plasează rezultate diferite pe file diferite

Filele sunt utile când ai prea mult conținut și vrei să îl organizezi mai bine. Pentru a crea o filă, pur și simplu împachetezi elementele UI în funcția tabPanel() și furnizezi un titlu pentru filă prin argumentul title.

Pentru ca filele să apară în interfață, panourile de file trebuie grupate într-un „container" de tip tabset, prin împachetarea tuturor panourilor în tabsetPanel().

Sarcina ta este să adaugi file în aplicația Shiny, astfel încât elementele de intrare și butonul de descărcare să fie pe o filă, graficul pe o altă filă, iar tabelul pe o a treia filă. Deoarece aceasta este o modificare pur vizuală, toate schimbările de cod se fac doar în secțiunea UI.

Acest exercițiu face parte din cursul

Studii de caz: Construirea aplicațiilor web cu Shiny în R

Vezi cursul

Instrucțiuni pentru exercițiu

  • Folosește funcția tabsetPanel() pentru a crea un container cu trei panouri de file:
    • O primă filă pentru elementele de intrare, cu numele "Inputs".
    • O a doua filă care afișează graficul, cu numele "Plot" (linia 16).
    • O a treia filă care afișează tabelul, cu numele "Table" (linia 21).

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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)
Editează și rulează codul