IniziaInizia gratis

Metti risultati diversi su schede diverse

Le schede sono utili quando hai troppo contenuto e vuoi suddividerlo. Per creare una scheda, avvolgi semplicemente gli elementi della UI nella funzione tabPanel() e fornisci un titolo per la scheda usando l'argomento title.

Per far apparire le schede nella UI, i pannelli delle schede devono essere raggruppati in un "contenitore" di schede, racchiudendo tutti i pannelli delle schede dentro tabsetPanel().

Il tuo compito è aggiungere delle schede all'app Shiny, in modo che gli input e il pulsante di download siano in una scheda, il grafico in un'altra e la tabella in una terza. Poiché si tratta di una modifica puramente visiva, tutte le modifiche al codice vanno fatte solo nella parte di UI.

Questo esercizio fa parte del corso

Casi di studio: creare applicazioni web con Shiny in R

Visualizza il corso

Istruzioni dell'esercizio

  • Usa la funzione tabsetPanel() per creare un contenitore con tre schede:
    • Una prima scheda per gli input e chiamala "Inputs".
    • Una seconda scheda che mostri il grafico e chiamala "Plot" (riga 16).
    • Una terza scheda che mostri la tabella e chiamala "Table" (riga 21).

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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)
Modifica ed esegui il codice