i have developed a Shiny web application that displays an interactive map where you can select a weather station and a year, and then it generates an Excel file containing the meteorological data for the selected station. However, i'am encountering issues: the map takes a long time to load, and when i select a station and a year and try to export the data, the interface closes and the software displays an error stating that the "annee" argument is missing, with no default value. please help mee to solve that problem here is my code:
library(shiny)
library(shinyWidgets)
library(leaflet)
library(tidyverse)
library(lubridate)
library(shinybusy)
library(readr)
ui <- bootstrapPage(
##---------------------------------------------------------------
## Interface --
##---------------------------------------------------------------
add_busy_spinner(spin = "radar", margins = c(10, 20)), # Logo de chargement
tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
leafletOutput("map", width = "100%", height = "100%"), # Carte
absolutePanel(id='nomappli',top = 0, left=70,img(src = 'EDFMeteostat.png',height = 68.35, width = 397.5),
downloadButton("dl_aide", "Aide"),
downloadButton("dl_rapport", "Rapport Ms-Pro")),# Logo
absolutePanel(id='parametres',class='panel panel-default' ,top = 10, right = 10, # Panneau au premier plan par dessus la carte
width = "auto", fixed = TRUE, draggable = TRUE,
p(),
p(strong("Extraction de données météos au pas horaire")),
pickerInput("pays", label = "Pays", # Menu déroulant sélection pays
choices = df_conversion_ISO_dispo[[3]],
selected = "France Metropole - FR Metro", #sélection par défaut france métropole
#multiple = TRUE,
options = list(`live-search` = TRUE)),
checkboxInput("chexkbox_recent", label = "Avec anciennes stations (arretées depuis plus d'un an)", value = FALSE), #choix données récentes
pickerInput("annee", label = "Choix d'année d'extraction",
choices = c(year(Sys.Date()),
year(Sys.Date() %m-% years(1)),
year(Sys.Date() %m-% years(2)),
year(Sys.Date() %m-% years(3)),
year(Sys.Date() %m-% years(4)),
year(Sys.Date() %m-% years(5)),
year(Sys.Date() %m-% years(6)),
year(Sys.Date() %m-% years(7)),
year(Sys.Date() %m-% years(8)),
year(Sys.Date() %m-% years(9)),
year(Sys.Date() %m-% years(10)),
year(Sys.Date() %m-% years(11)),
year(Sys.Date() %m-% years(12)),
year(Sys.Date() %m-% years(13)),
year(Sys.Date() %m-% years(14)),
year(Sys.Date() %m-% years(15)),
year(Sys.Date() %m-% years(16)),
year(Sys.Date() %m-% years(17)),
year(Sys.Date() %m-% years(18)),
year(Sys.Date() %m-% years(19)),
year(Sys.Date() %m-% years(20)),
year(Sys.Date() %m-% years(21)),
year(Sys.Date() %m-% years(22))
),
selected = year(Sys.Date() %m-% years(1))
),
p(),
p(strong('Calcul des DJU :')),
sliderInput("slider_chauf", label = "Température de consigne chauffage (°C)", min = 15, max = 25, value = 18),
sliderInput("slider_clim", label = "Température de consigne climatisation (°C)", min = 15, max = 25, value = 18),
actionButton("export", label = "Exporter"),
p(),
)
)
server <- function(input, output, session) { # -------------SERVER------------------------------------------
#===========================================================================================================
#maj_stations()
valeurs <- reactiveValues() #liste pour mettre en mémoire des variables "globales"
##------------------------------------------------------------------------
## Filtration des stations à afficher en fonction du pays sélectionné --
##------------------------------------------------------------------------
filteredData <- reactive({
df_filtr_stations <- df_stations
if (input$chexkbox_recent == FALSE){ # case à cocher si données < à 1 an
df_filtr_stations <- filter(df_filtr_stations , inventory.hourly.end >Sys.Date() %m-% years(1))
}
if (input$pays == 'France Metropole - FR Metro'){ # Centrage sur la france
filter(df_filtr_stations , country == 'FR', timezone == 'Europe/Paris')
} else {
l<-which(df_conversion_ISO_dispo[[3]]==input$pays) # Prend la ligne qui correspond au pays choisi
filter(df_filtr_stations, country == df_conversion_ISO_dispo[l,2]) #Filtration en fonction du code ISO du pays
return(filter(df_filtr_stations, country == df_conversion_ISO_dispo[l,2])) #Filtration en fonction du code ISO du pays
}
})
##---------------------------------------------------------------
## Click station --
##---------------------------------------------------------------
observe({ #Stockage de l'identifiant d'une station dans la liste "valeurs" quand l'utilisateur clique sur un marker
click<-input$map_marker_click
if(is.null(click))
return()
valeurs$id <- click$id
})
##---------------------------------------------------------------
## CARTE --
##---------------------------------------------------------------
#Affichage de la carte
output$map <- renderLeaflet({
leaflet() %>%
addTiles() %>%
setView(lng = 2.2137, lat = 46.2276, zoom = 6) %>% # Centrage sur la France
addMarkers(data = stations,
lng = ~location.longitude,
lat = ~location.latitude,
label = ~name.en,
popup = ~popuptext,
layerId = ~id)
})
## Chargement du fichier meteo --
##----------------------------------------------------------------
data_meteo <- reactive({
inFile <- input$file
if (is.null(inFile)){
return(NULL)
}
df_meteo <- fread(inFile$datapath)
return(df_meteo)
# saveRDS(df_meteo,'df_meteo_test_tl_fichier.rds')
# return(df_meteo)
})
##----------------------------------------------------------------
## Click du bouton "exporter" --
##----------------------------------------------------------------
observeEvent(input$export, {
if (is.null(valeurs$id)){ #message d'erreur si exporter sans avoir sélectionné de station
showModal(modalDialog(
"Pas de station sélectionnée, cliquez sur une station pour la sélectionner.",
footer = modalButton("Retour"),
))
return()
}
showModal(modalDialog(
title = NULL,
p(strong("1 - Cliquer sur ce lien :",
a(nom_lien(valeurs$id))
)),
p("2 - Si le lien n'a pas fonctionné, copiez le lien dans votre navigateur internet"),
footer = NULL,
))
})
}
##----------------------------------------------------------------
## Lancement de l'application --
##----------------------------------------------------------------
shinyApp(ui = ui, server = server)