IniziaInizia gratis

Aggiungi un filtro per anno: cursore numerico

I cursori (slider) possono essere usati per scopi simili agli input numerici, perché offrono all'utente un modo per selezionare un numero.

Se il valore iniziale fornito (argomento value) dello slider è un singolo numero, allora il cursore servirà a selezionare un unico valore. Tuttavia, se il valore iniziale è un vettore di due numeri, il cursore permetterà di selezionare due numeri invece di un solo valore.

Abbiamo già visto che input diversi possono avere argomenti diversi. Può essere difficile ricordare esattamente quali argomenti usa ciascun input. Il modo migliore per scoprirlo è consultare la documentazione o l'help della funzione di input specifica.

Questo esercizio fa parte del corso

Casi di studio: creare applicazioni web con Shiny in R

Visualizza il corso

Istruzioni dell'esercizio

  • Aggiungi alla UI uno sliderInput() con ID "years" e l'etichetta "Years" (riga 14).
    • Imposta il valore minimo all'anno più antico nel dataset e il valore massimo all'anno più recente nel dataset.
    • Per impostazione predefinita, gli estremi del cursore devono essere 1977 e 2002, così da mostrare solo i dati compresi tra questi due anni (inclusi).
  • Aggiungi codice al server in modo che gli anni scelti nell'input vengano usati per filtrare i dati gapminder, e compaiano solo i record entro questi anni (riga 28).

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      textInput("title", "Title", "GDP vs life exp"),
      numericInput("size", "Point size", 1, 1),
      checkboxInput("fit", "Add line of best fit", FALSE),
      radioButtons("color", "Point color",
                   choices = c("blue", "red", "green", "black")),
      selectInput("continents", "Continents",
                  choices = levels(gapminder$continent),
                  multiple = TRUE,
                  selected = "Europe"),
      # Add a slider selector for years to filter
      ___("years", ___, ___, ___, ___)
    ),
    mainPanel(
      plotOutput("plot")
    )
  )
)

# Define the server logic
server <- function(input, output) {
  output$plot <- renderPlot({
    # Subset the gapminder data by the chosen years
    data <- subset(gapminder,
                   continent %in% input$continents &
                   year >= ___$years[1] & year <= ___$years[2])
    
    p <- ggplot(data, aes(gdpPercap, lifeExp)) +
      geom_point(size = input$size, col = input$color) +
      scale_x_log10() +
      ggtitle(input$title)
    
    if (input$fit) {
      p <- p + geom_smooth(method = "lm")
    }
    p
  })
}

shinyApp(ui = ui, server = server)
Modifica ed esegui il codice