Tu primer shinydashboard

Creación de paneles con shinydashboard

Png Kee Seng

Researcher

Hasta ahora

  • Boceto en la interfaz (UI)
    • Header, barra lateral, body
  • Define salidas y cómo interactúan con entradas
  • El server cumple este rol

dibujo

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

ui <- dashboardPage(header, sidebar, body)
server <- function(input, output) { ... }
shinyApp(ui, server)
Creación de paneles con shinydashboard

El server

  • Hay que definir salidas y entradas
  • Especifica salidas y cómo interactúan con entradas
  • Útil definir funciones auxiliares para reducir ruido y mejorar legibilidad
    • Pon estas funciones arriba del código

El server es como un camarero que transmite tus instrucciones a la cocina. En una shinyApp, el server indica a R cómo deben interactuar las entradas con las salidas.

Creación de paneles con shinydashboard

Añadir un gráfico

  • Volvamos al dashboard del torneo global de fútbol
  • Añadamos un hexbin para el equipo 1
  • Luego lo pondremos en el server
  • ¿Y si queremos lo mismo para el equipo 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()
  })
}
Creación de paneles con shinydashboard

Definir objetos de ggplot en server

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()
} }) }
Creación de paneles con shinydashboard

Usar funciones auxiliares

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()
  }
}
Creación de paneles con shinydashboard

Usar funciones auxiliares

Con función auxiliar

server <- function(input, output) {
  output$plot1 <- renderPlot(plot_hex(input$team)) 
}
  • ¿No es más legible?

Sin función auxiliar

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()
      }
    })
}
Creación de paneles con shinydashboard

Juntándolo todo

# A complete shinydashboard

header <- dashboardHeader(title = "Torneo de fútbol")
sidebar <- dashboardSidebar(sidebarMenu(menuItem("Pases/goles", tabName = "passtab"), menuItem("Vacío", tabName = "emptytab")))
body <- dashboardBody(tabItems( tabItem("passtab", fluidRow(box(selectInput("team", "Número de equipo", 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)
Creación de paneles con shinydashboard

Una animación que muestra el shinydashboard renderizado. Observa que la persona usuaria puede alternar entre páginas o pestañas y dar entradas para obtener diferentes salidas.

Creación de paneles con shinydashboard

¡Vamos a practicar!

Creación de paneles con shinydashboard

Preparing Video For Download...