Warning: Error in library: there is no package called ‘shinythemes’ when trying to deploy shinyapp in ec2 aws

517 Views Asked by At

I´m deploying a shiny app using docker in aws but I can´t access to it because the error "Warning: Error in library: there is no package called ‘shinythemes’" keeps showing up.

the ui.r

library(shinythemes)
library(readr)
library(tidyverse)
library(shiny)
library(shinyWidgets)

options(shiny.sanitize.errors = FALSE)
# equipos dataset
equipos <- read_delim("laliga_partidos_2018-2019.csv", ";")
nombres_equipos <- unique(equipos$AwayTeam)
equipos$Season <- NULL

# jugadores dataset
jugadores <- read_delim("laliga_player_stats_spanish.csv", ";")
nombres_jugadores <- unique(jugadores$Nombre)
posiciones_jugadores <- unique(jugadores$Posicion)
equipos_jugadores <- unique(jugadores$Equipo)


total_equipos <- equipos %>% 
  summarise(Cantidad_equipos = n_distinct(HomeTeam))

total_jugadores <- jugadores %>% 
  summarise(jugadores_distintos = n_distinct(Nombre))

total_golesaway <- equipos %>% 
  summarise(sum(equipos$FTHG))

total_goleshome <- equipos %>% 
  summarise(sum(equipos$FTAG))

total_goles <- total_golesaway + total_goleshome

total_amarillas <- jugadores %>% 
  summarise(sum(jugadores$`Tarjetas amarillas`))

total_rojas <- jugadores %>% 
  summarise(sum(jugadores$`Tarjetas rojas`))

goles_por_equipo <- jugadores %>% 
  select(Equipo,`Goles marcados`) %>% 
  group_by(Equipo) %>% 
  summarise(Equipo=Equipo,goles = sum(`Goles marcados`)) %>% 
  arrange(desc(goles))

goles_por_equipo <-unique(goles_por_equipo)
  
campeon <- goles_por_equipo$Equipo[1]


fluidPage(theme = shinytheme("united"),
          #setBackgroundImage(src = "elbicho.png"),
          titlePanel(h2(style="text-align:center;", "La liga 2018-2019 stats"),),
          mainPanel(
            tabsetPanel(
              tabPanel("Inicio",
                       br(),
                       fluidRow(
                         column(6, div(style="background-color:#ff9a76; text-align:center; border-radius:5px; height:22px", h4(total_jugadores , " jugadores inscritos"))),
                         column(6, div(style="background-color:#ff9a76; text-align:center; border-radius:5px; height:22px", h4(total_equipos , " equipos")))
                       ),
                       fluidRow(
                         column(6, div(style="background-color:#ff9a76; text-align:center; border-radius:5px; height:22px", h4(total_goles , " goles anotados"))),
                         column(6, div(style="background-color:#ff9a76; text-align:center; border-radius:5px; height:22px", h4(total_amarillas , "tarjetas amarillas y ", total_rojas, "rojas")))
                       ),
                       br(),
                       div(style="text-align:center",
                           h4("Goles por equipo"),
                           plotOutput('graficagoles')),
                       br(),
                       fluidRow(
                         column(3, img(src="winner.png", height = "150px")),
                         column(9, h2(style="text-align:left;", "El campeón de la temporada fue ", campeon),)),
                       br(),
                       ),
              tabPanel("Equipos",
                       br(),
                       sidebarPanel(
                         h3("Resultado"),
                         div(style="font-size:x-large", textOutput('resultado')),
                         h3("Ganador del partido"),
                         imageOutput("homeTeam"),
                         selectInput("bins",
                                     "Buscar por equipo:",
                                     choices = nombres_equipos,
                                     selected = "FC Barcelona"
                         )
                       ),
                       mainPanel(h2("Equipos"), 
                                 div(
                                   style="font-style: italic;",
                                   tags$ul(
                                     tags$li("FTHG = Full Time Home Team Goals"),
                                     tags$li("FTAG = Full Time Away Team Goals"),
                                     tags$li("FTR = Full Time Result (H=Home Win, D=Draw, A=Away Win)"),
                                     tags$li("HTHG = Half Time Home Team Goals"),
                                     tags$li("HTAG = Half Time Away Team Goals"),
                                     tags$li("HTR = Half Time Result (H=Home Win, D=Draw, A=Away Win)
")
                                   )
                                 ),
                                 br(),
                                 fluidRow(fluidRow(column(6,shiny::dataTableOutput('tabla1'))),
                                          sidebarLayout(sidebarPanel(
                                            ),
                                            mainPanel()
                                            
                                          )),
                                 
                                 )
                       ),
              tabPanel("Jugadores",
                       br(),
                       sidebarPanel(
                         radioButtons("player_type", "Posición", choices=posiciones_jugadores, selected="Delantero"),
                         selectInput("players_select",
                                     "Seleccionar jugador",
                                     choices=nombres_jugadores,
                                     selected="Hodei Oleaga"),
                         radioButtons("player_team", "Equipo", choices=equipos_jugadores),
                       ),
                       mainPanel(fluidRow(
                                   column(3,imageOutput("team", height = 100)), 
                                   column(9, list(
                                     div(style="font-size:x-large", textOutput("jugador")), 
                                     br(),
                                     div(style="font-size:medium", textOutput("dorsal")),
                                     br(),
                                     div(style="font-size:medium", textOutput("golesAnotados"))
                                    ))
                                 ),
                                 br(),
                                 div(style="font-style: italic; display:inline-block", textOutput("minutos"), textOutput("cards")),
                                 br(),
                                 plotOutput("distPie"),
                                 plotOutput("distDuelos"),
                                 br(),
                                 p("Información adicional del jugador:"),
                                 shiny::dataTableOutput('tablajugadores')
                                 )
                       )
          )
        )
)


and the server.R


library(ggplot2)

library(DT)

library(dplyr)

library(rsconnect)
# equipos dataset
equipos <- read_delim("laliga_partidos_2018-2019.csv", ";")
nombres_equipos <- unique(equipos$AwayTeam)
equipos$Season <- NULL

# jugadores dataset
jugadores <- read_delim("laliga_player_stats_spanish.csv", ";")
nombres_jugadores <- unique(jugadores$Nombre)
posiciones_jugadores <- unique(jugadores$Posicion)
equipos_jugadores <- unique(jugadores$Equipo)


total_equipos <- equipos %>% 
  summarise(Cantidad_equipos = n_distinct(HomeTeam))

total_jugadores <- jugadores %>% 
  summarise(jugadores_distintos = n_distinct(Nombre))

total_golesaway <- equipos %>% 
  summarise(sum(equipos$FTHG))

total_goleshome <- equipos %>% 
  summarise(sum(equipos$FTAG))

total_goles <- total_golesaway + total_goleshome

total_amarillas <- jugadores %>% 
  summarise(sum(jugadores$`Tarjetas amarillas`))

total_rojas <- jugadores %>% 
  summarise(sum(jugadores$`Tarjetas rojas`))

goles_por_equipo <- jugadores %>% 
  select(Equipo,`Goles marcados`) %>% 
  group_by(Equipo) %>% 
  summarise(Equipo=Equipo,goles = sum(`Goles marcados`)) %>% 
  arrange(desc(goles))

goles_por_equipo <-unique(goles_por_equipo)

campeon <- goles_por_equipo$Equipo[1]

jugadores <- read_delim("laliga_player_stats_spanish.csv", ";" )
jugadores <- na.omit(jugadores)

shinyServer(function(input, output, session) {
  
  equiposelect <- reactiveVal() 
  observe({
    query <- parseQueryString(session$clientData$url_search)
    
    if (!is.null(query[['bins']])) {
      updateSelectInput(session, "bins", selected = query[['bins']])
      equiposelect(query[["bins"]])
    }else{
      equiposelect("FC Barcelona")
    }
    
  })
  
  
  
  
  ## Equipos
  output$tabla1 <- DT::renderDataTable({
    DT::datatable(equipos,
                  extensions = 'Buttons',
                  options = list(pageLength = 10,
                                 lengthMenu = c(5, 10, 15),
                                 dom = 'Bfrtip',
                                 buttons = c('csv'), search = list(regex = TRUE, caseInsensitive = FALSE, search = equiposelect())),
                  filter = 'bottom',
                  selection='single' 
    ) 
  })
  
  output$graficagoles <- renderPlot({
      ggplot(goles_por_equipo, aes(x = "", y = goles, fill = Equipo )) +
      geom_bar(stat = "identity" , width = 1 , color= "white") +
      coord_polar("y" ,start = 0)+ 
      geom_text(aes(label = paste0(goles)), position = position_stack(vjust = 0.5))+
      theme_void()
  })
  
  output$homeTeam <- renderImage({
    if (is.null(input$tabla1_rows_selected))
      return(list(
        src = paste0("www/teams.png"),
        contentType = "image/png"
      ))
    
    if (!is.null(input$tabla1_rows_selected)) {
      win <- equipos$FTR[input$tabla1_rows_selected]
      if(win=='H'){
        return(list(
          src = paste0("www/", equipos$HomeTeam[input$tabla1_rows_selected], ".png"),
          contentType = "image/png"
        ))
      }else{
        if(win=='A'){
          return(list(
            src = paste0("www/", equipos$AwayTeam[input$tabla1_rows_selected], ".png"),
            contentType = "image/png"
          ))
        }else{
          return(list(
            src = paste0("www/tie.png"),
            contentType = "image/png"
          ))
        }
      }
      
    }
  }, deleteFile = FALSE)
  
  resultado <- reactiveVal() 
  observeEvent(input$tabla1_rows_selected, {
    hteam <- equipos$FTHG[input$tabla1_rows_selected]
    ateam <- equipos$FTAG[input$tabla1_rows_selected]
    resultado(paste0(hteam, " - ", ateam)) 
  })
  output$resultado <- renderText({resultado()})
  
  ## Jugadores
  # cambiar jugadores por equipo
  observeEvent(input$player_team, {
    newPlayers <- jugadores %>% select(Equipo, Nombre, Posicion) %>% filter(Equipo==input$player_team) %>% filter(Posicion==input$player_type)
    updateSelectInput(session, 'players_select', choices=newPlayers$Nombre, selected=newPlayers$Nombre[1])
  })
  
  # cambiar jugadores por posicion
  observeEvent(input$player_type, {
    newPlayers <- jugadores %>% select(Posicion, Nombre, Equipo) %>% filter(Posicion==input$player_type) %>% filter(Equipo==input$player_team)
    updateSelectInput(session, 'players_select', choices=newPlayers$Nombre, selected=newPlayers$Nombre[1])
  })
  
  output$jugador <- renderText({input$players_select})
  
  # cambiar dorsal
  dorsal <- reactiveVal() 
  observeEvent(input$players_select, {
    newDorsal <- jugadores %>% select(Dorsal, Nombre) %>% filter(Nombre==input$players_select)
    dorsal(newDorsal$Dorsal) 
  })
  output$dorsal <- renderText({paste0("Dorsal: ", dorsal())})
  
  # cambiar minutos
  minutos <- reactiveVal() 
  observeEvent(input$players_select, {
    newDorsal <- jugadores %>% select(`Minutos jugados`, Nombre) %>% filter(Nombre==input$players_select)
    minutos(newDorsal$`Minutos jugados`) 
  })
  output$minutos <- renderText({paste0(minutos(), " minutos jugados")})
  
  # cambiar goles
  golesAnotados <- reactiveVal() 
  observeEvent(input$players_select, {
    newGoles <- jugadores %>% 
      select(`Goles marcados desde dentro del área`, `Goles marcados desde fuera del área`,
             `Goles marcados con el pie izquierdo`, `Goles marcados con el pie derecho`, 
             `Goles marcados de penalti`, `Goles marcados de cabeza`, `Goles marcados de jugada a balón parado`,
             `Goles marcados en propia puerta`, Nombre) %>% 
      filter(Nombre==input$players_select) %>% 
      mutate(goles=as.numeric(`Goles marcados desde dentro del área`)+as.numeric(`Goles marcados desde fuera del área`)+
             as.numeric(`Goles marcados con el pie izquierdo`)+as.numeric(`Goles marcados con el pie derecho`)+
             as.numeric(`Goles marcados de penalti`)+as.numeric(`Goles marcados de cabeza`)+as.numeric(`Goles marcados de jugada a balón parado`)+
             as.numeric(`Goles marcados en propia puerta`))
    golesAnotados(newGoles$goles) 
  })
  output$golesAnotados <- renderText({paste0("Goles anotados: ", golesAnotados())})
  
  # tarjetas amarillas y rojas
  rojas <- reactiveVal() 
  amarillas <- reactiveVal()
  observeEvent(input$players_select, {
    newCards <- jugadores %>% select(`Tarjetas amarillas`, `Tarjetas rojas`, Nombre) %>% filter(Nombre==input$players_select)
    rojas(newCards$`Tarjetas rojas`) 
    amarillas(newCards$`Tarjetas amarillas`) 
  })
  output$cards <- renderText({paste0(rojas(), " tarjetas rojas y ", amarillas(), " amarillas")})
  
  # porcentaje partidos jugados
  output$distPie <- renderPlot({
    perc <- jugadores %>% select(`Porcentaje de Partidos jugados enteros`, Nombre) %>% filter(Nombre==input$players_select)
    myNum <- str_replace(sub("%", "",as.character(perc)), ',', '.')
    useNum <- as.numeric(myNum[1])/100
    
    vals<-c(useNum,1-useNum)
    guias<-c("Partidos jugados enteros", "Partidos no jugados enteros")
    myDf <- data.frame(vals, guias)
    
    pie(myDf$vals, main = "Porcentaje de partidos jugados enteros", labels=myDf$guias)
  })
  
  # duelos
  output$distDuelos <- renderPlot({
    duelos <- jugadores %>% select(`Duelos con éxito`, `Duelos fallidos`, Nombre) %>% filter(Nombre==input$players_select)
    
    vals<-c(duelos$`Duelos con éxito`, duelos$`Duelos fallidos`)
    guias<-c("Duelos con éxito", "Duelos fallidos")
    myDf <- data.frame(vals, guias)
    
    ggplot(data=myDf, aes(x=vals, y=vals, fill=vals, label=guias)) +
      geom_bar(colour="black", fill="#DD8888", stat="identity") +
      xlab("Tipo de duelo") + ylab("Cantidad") +
      ggtitle("Duelos jugados con éxito y fallidos") +
      geom_label(aes(fill = factor(myDf)), fontface = "bold") +
      theme(legend.position = 'none')
    
  })
  
  # logo del equipo
  output$team <- renderImage({
    if (is.null(input$player_team))
      return(NULL)
    
    if (!is.null(input$player_team)) {
      return(list(
        src = paste0("www/",input$player_team, ".png"),
        contentType = "image/png"
      ))
    }
  }, deleteFile = FALSE)
  
  output$tablajugadores <- DT::renderDataTable({
    infojugador <- jugadores %>% filter(Nombre==input$players_select)
    infojugador$Nombre <- NULL
    infojugador$Equipo <- NULL
    infojugador$Posicion <- NULL
    infojugador$Dorsal <- NULL
    infojugador$`Minutos jugados` <- NULL
    infojugador$`Porcentaje de Partidos jugados enteros` <- NULL
    infojugador$`Porcentaje de Partidos jugados` <- NULL
    infojugador$`Segunda tarjeta amarilla` <- NULL
    infojugador$`Duelos con éxito` <- NULL
    infojugador$`Duelos fallidos` <- NULL
    DT::datatable(infojugador, options=list(dom = 't')) 
  })
})

and my dockerfile looks like this:

FROM rocker/shiny:latest

# system libraries of general use
## install debian packages
RUN apt-get update -qq && apt-get -y --no-install-recommends install \
    libxml2-dev \
    libcairo2-dev \
    libsqlite3-dev \
    libmariadbd-dev \
    libpq-dev \
    libssh2-1-dev \
    unixodbc-dev \
    libcurl4-openssl-dev \
    libssl-dev
    
    
## update system libraries
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get clean
    
# Install R packages
#USER shiny
#RUN R -e install.packages(c('shinythemes' , 'readr' , 'tidyverse', 'shiny', 'shinywidgets' , #'ggplpot2', 'DT' , 'dplyr' , 'rsconnect'))"

RUN Rscript -e "install.packages('shinythemes',dependencies=TRUE)"
RUN Rscript -e "install.packages('readr')"
RUN Rscript -e "install.packages('tidyverse')"
RUN Rscript -e "install.packages('shiny')"
RUN Rscript -e "install.packages('shinywidgets')"
RUN Rscript -e "install.packages('ggplot2')"
RUN Rscript -e "install.packages('DT')"
RUN Rscript -e "install.packages('dplyr')"
RUN Rscript -e "install.packages('rsconnect')"


and when I run the code to deploy it :

sudo docker container run --rm -p 3838:3838 \-v /home/ubuntu/la-liga-2018-2019-stats/stats/:/srv/shiny-server/stats \-v /home/ubuntu/log/shiny-server/:/var/log/shiny-server/ borisrendon/shinyauth

I get this : enter image description here

and in the browser : enter image description here

0

There are 0 best solutions below