Je eerste shinyApp
Je hebt gezien hoe inputs en outputs samenkomen in een shinyApp. Je hebt ook gezien hoe je met een shinyApp de resultaten van het slaaponderzoek kunt tonen.
Je doel is nu om een shinyApp te maken die twee hoofdresultaten rapporteert:
- De verdeling van het aantal uren slaap
- De mediaan van het aantal uren slaap voor verschillende leeftijdsgroepen
In deze oefening is de data opgeslagen als een dplyr-dataframe met de naam sleep, en de libraries shiny en tidyverse zijn al geladen.
Nu ben jij aan de beurt om je eigen shinyApp te maken!
Deze oefening maakt deel uit van de cursus
Dashboards bouwen met shinydashboard
Oefeninstructies
- Voeg twee plotoutputs met de naam "histogram" en "barchart" toe aan de
mainPanel. - Vervang in het argument
choiceNamesincheckboxGroupInput()de inhoud door iconen met de namen "calendar", "briefcase" en "gift". - Definieer de twee outputs, één met de naam
histogramen een andere met de naambarchart. - Gebruik de functie
shinyApp()om de shiny-app te renderen.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
ui <- fluidPage(
titlePanel("Sleeping habits in America"),
fluidRow(
# Place two plots here, called "histogram" and "barchart"
mainPanel(___("histogram"), ___("barchart")),
inputPanel(sliderInput("binwidth",
label = "Bin width",
min = 0.1, max = 2,
step = 0.01, value=0.25),
checkboxGroupInput("days", "Choose types of days:",
# Replace the list elements with icons called "calendar", "briefcase" and "gift"
choiceNames = list("All days",
"Non-holiday weekdays",
"Weekend days/holidays"),
choiceValues = list("All days",
"Nonholiday weekdays",
"Weekend days and holidays"))),
"In general, across the different age groups, Americans seem to get adequate daily rest." ))
server <- function(input, output, session) {
# Define the histogram and barchart
output$histogram <- ___({
ggplot(sleep, aes(x=`Avg hrs per day sleeping`)) +
geom_histogram(binwidth = input$binwidth, col='white') +
theme_classic()
})
___ <- ___({
filter(sleep, `Type of Days` %in% input$days) %>%
group_by(`Type of Days`, `Age Group`) %>%
summarize(`Median hours` = median(`Avg hrs per day sleeping`)) %>%
ggplot(aes(x = `Median hours`, y = `Age Group`, fill = `Type of Days`)) +
geom_col(position = 'dodge') + theme_classic()
})
}
# Use shinyApp() to render the shinyApp
___