Aan de slagBegin gratis

Je eerste shinydashboard met interactieve elementen

Je hebt gezien hoe je interactieve elementen kunt toevoegen in een shinydashboard, en ook hoe je interactieve datatabellen kunt toevoegen.

In deze oefening zijn Airbnb-vermeldingen opgeslagen als een data frame met de naam listings, en de geospatiale kaart is opgeslagen als een leaflet-object met de naam m_london. De header en zijbalk zijn opgeslagen als header en sidebar.

Aangepaste helperfuncties:

  • make_plots: Maakt boxplots of vioolplots
  • num_listings: Berekent het aantal vermeldingen op basis van het geselecteerde bereik
  • num_private_rooms: Berekent het aantal privékamers als percentage van alle vermeldingen, op basis van het geselecteerde bereik
  • median_price: Berekent de mediaanprijs op basis van het geselecteerde bereik Wil je meer weten over een helperfunctie, voer die dan uit (zoals make_plots) in de console.

Deze oefening maakt deel uit van de cursus

Dashboards bouwen met shinydashboard

Bekijk cursus

Oefeninstructies

  • Voeg plotly-boxplots/vioolplots toe met de naam "plots".
  • Voeg een datatabel toe met de naam "table".
  • Voeg een leaflet-kaart toe met de naam "map".
  • Stel de juiste argumenten in dashboardPage() in.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

body <- dashboardBody(
  tabItems(
    tabItem(tabName = "charts",
            fluidRow(
              valueBoxOutput(outputId = "count"), valueBoxOutput(outputId = "prop"),valueBoxOutput(outputId = "med") ),
            fluidRow(
              tabBox(side = "left", id = "tabset", height = "500px",
                     tabPanel("Charts", 
                              # Place plotly object here
                              fluidRow(box(___("plots", height = 500, width = 600)) ) ), 
                     # Place dataTable object here
                     tabPanel("Data table", height = "500px", ___("table")) ), 
              box(side = "right", height = "200px", title = "Welcome to London!",),
              box(side = "right", height = "385px", title = "Controls",
                  sliderInput(inputId = "range", label = "Select price range:",
                              min = 0, max = 25000,value = c(0,2500)),
                  selectInput(inputId = "select", label = "Select group:", 
                              choices = c("Box plots", "Violin plots")) ) ) ),
    tabItem(tabName = "map",
            # Place leaflet object here
            fluidRow(box(title = "Map of listings in London", ___("map", height = 600, width = 700))) ) ) ) 

# Set the correct arguments for dashboardPage()
ui <- dashboardPage(___, ___, ___) 

server <- function(input, output) {
  output$count <- renderValueBox(valueBox("Number of listings", num_listings(input$range), 
                                        icon = icon("house-user") ))
  output$prop <- renderValueBox(valueBox("Private rooms", paste0(num_private_rooms(input$range), "% of all listings"),
                                        icon = icon("eye"), color = "orange") )
  output$med <- renderValueBox(valueBox("Median price", paste0(median_price(input$range), "£"), 
                                        icon = icon("money-bill-alt"), color = "olive") )
  output$plots <- renderPlotly(make_plots(input$range, input$select))
  output$table <- renderDataTable(filter(listings, price >= input$range[1], price <= input$range[2]) %>% select(c(name, neighbourhood, room_type, price)), 
                                  options = list(lengthMenu = c(5, 30, 50)))
  output$map <- renderLeaflet(m_london)
}

shinyApp(ui, server)
Code bewerken en uitvoeren