Ditt första shinydashboard

Bygga dashboards med shinydashboard

Png Kee Seng

Researcher

Vägen hit

  • Wireframing i användargränssnittet (UI)
    • Header, sidofält, body
  • Definiera utdata och hur de interagerar med användarindata
  • Servern ansvarar för detta

drawing

header <- dashboardHeader(...)
sidebar <- dashboardSidebar(...)
body <- dashboardBody(...)

ui <- dashboardPage(header, sidebar, body)
server <- function(input, output) { ... }
shinyApp(ui, server)
Bygga dashboards med shinydashboard

Servern

  • Utdata och indata måste definieras
  • Ange utdata och hur de interagerar med användarindata
  • Egna hjälpfunktioner minskar röran och förbättrar läsbarheten
    • Placera hjälpfunktionerna överst i koden

Servern fungerar som en hjälpsam servitör som förmedlar dina instruktioner till köket. Servern i en shinyApp talar om för R hur indata ska interagera med utdata.

Bygga dashboards med shinydashboard

Lägga till ett diagram

  • Tillbaka till dashboarden för den globala fotbollsturneringen
  • Vi lägger till ett hexbin-diagram för lag 1
  • Diagrammet behöver sedan placeras i servern
  • Vad händer om vi vill ha samma diagram för lag 2?
soccer %>%
  ggplot(aes(x=`1_passes_compeletd`, 
             y=`1_goal_prevented`)) +
  geom_hex(bins=10) + theme_classic()
server <- function(input, output){
  output$plot1 <- renderPlot({
  fifa %>%
    ggplot(aes(x=`1_passes_compeletd`, 
               y=`1_goal_prevented`)) +
    geom_hex(bins=10) + theme_classic()
  })
}
Bygga dashboards med shinydashboard

Definiera ggplot-objekt i servern

server <- function(input, output) {
  output$plot1 <- renderPlot({
    if (input$team == 1){

fifa %>% ggplot(aes(x=`1_passes_compeletd`, y=`1_goal_prevented`)) + geom_hex(bins=10) + theme_classic()
} else if (input$team == 2){
fifa %>% ggplot(aes(x=`2_passes_compeletd`, y=`2_goal_prevented`)) + geom_hex(bins=10) + theme_classic()
} }) }
Bygga dashboards med shinydashboard

Använda hjälpfunktioner

plot_hex <- function(team){
  if (team == 1){
    soccer %>% ggplot(aes(x=`1_passes_compeletd`, 
                        y=`1_goal_prevented`)) +
      geom_hex(bins=10) + theme_classic()
  }
  else if (team == 2){
    soccer %>% ggplot(aes(x=`2_passes_compeletd`, 
                        y=`2_goal_prevented`)) +
      geom_hex(bins=10) + theme_classic()
  }
}
Bygga dashboards med shinydashboard

Använda hjälpfunktioner

Med hjälpfunktion

server <- function(input, output) {
  output$plot1 <- renderPlot(plot_hex(input$team)) 
}
  • Är inte det här mer läsbart?

Utan hjälpfunktion

server <- function(input, output) {
  output$plot1 <- renderPlot({
    if (input$team == 1){
      soccer %>% ggplot(aes(x=`1_passes_compeletd`, 
              y=`1_goal_prevented`)) +
        geom_hex(bins=10) + theme_classic()
      }
    else if (input$team == 2){
      soccer %>% ggplot(aes(x=`2_passes_compeletd`, 
              y=`2_goal_prevented`)) +
        geom_hex(bins=10) + theme_classic()
      }
    })
}
Bygga dashboards med shinydashboard

Sätta ihop allt

# A complete shinydashboard

header <- dashboardHeader(title = "Soccer tournament")
sidebar <- dashboardSidebar(sidebarMenu(menuItem("Passes/goals", tabName = "passtab"), menuItem("Empty", tabName = "emptytab")))
body <- dashboardBody(tabItems( tabItem("passtab", fluidRow(box(selectInput("team", "Team number", choices = c(1,2))), box(plotOutput("plot1"))) ), tabItem("emptytab")) )
ui <- dashboardPage(header, sidebar, body)
server <- function(input, output) { output$plot1 <- renderPlot(plot_hex(input$team)) }
shinyApp(ui, server)
Bygga dashboards med shinydashboard

En animation som visar hur det renderade shinydashboarden ser ut. Användaren kan växla mellan olika sidor eller flikar och ge indata för att få olika utdata.

Bygga dashboards med shinydashboard

Nu kör vi en övning!

Bygga dashboards med shinydashboard

Preparing Video For Download...