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