Nouveau dans R shiny, nouveau dans les fichiers de formes, nouveau dans le codage de quoi que ce soit en dehors du nettoyage/analyse des données.

Je souhaite afficher sur une carte où des services particuliers sont disponibles dans mon état. J'ai des fichiers de formes pour les codes postaux (codes postaux) pour mon état. J'ai un fichier csv pour 14 types différents de services gouvernementaux disponibles pour les codes postaux.

La forme du CSV est d'avoir une nouvelle ligne pour chaque service disponible (c'est-à-dire si 3 services sont disponibles dans cette banlieue, il y aura 3 lignes ayant toutes le même code postal).

À partir du CSV, j'ai séparé 14 dataframes, une pour chaque type de service. J'ai fait une jointure interne pour chacun d'entre eux au fichier de formes du code postal. J'ai 14 blocs de données qui ont des polygones spatiaux uniquement pour les banlieues où le service est disponible.

J'ai créé des étiquettes contextuelles pour les banlieues en utilisant le type de code :

serviceA$label <- with(serviceA, paste (serviceA$town_name, serviceA$more_info))

Je l'ai fait séparément pour chacun des 14 types de services (serviceB, serviceC, etc.), ce qui ne semble pas élégant mais fonctionne.

Maintenant, voici où je ne sais pas quoi faire. Comment utiliser un sélecteur pour choisir le service qui m'intéresse et n'afficher que cette carte ?

J'ai trouvé des exemples d'ajout sélectif de marqueurs, etc., mais je ne sais pas comment utiliser le sélecteur pour choisir chaque trame de données contenant uniquement les fichiers de formes d'intérêt. S'il vous plaît laissez-moi savoir si j'ai mal configuré cela depuis le début.

Ce que j'ai essayé c'est:

ui <- fluidPage(selectInput(inputId = "Selector", label ="Type of Support", choices = c(
    'Service A', .....), leafletOutput("mymap"))

server <- function(input, output) {
  
  output$mymap <- renderLeaflet({
    **leaflet(input$Selector)** %>% 
      
      addPolygons(popup = ~label, weight = 1)})
}  

shinyApp(ui, server)

Je peux faire en sorte que la carte s'affiche correctement (mais pas selon un choix d'entrée réel) si je remplace la partie en gras leflet(input$Selector) par leaflet(serviceA), donc je suppose qu'une partie de mon code est fausse mais je ne peux pas trouver la bonne syntaxe ou si vous ne pouvez tout simplement pas mettre le résultat d'un sélecteur à cet endroit (complètement nouveau pour tout en dehors de l'analyse de données scientifiques, donc j'ai peut-être mal compris ce que les parties ui et serveur peuvent faire ?).

Merci pour toute suggestion :-)

0
LeanneB 17 nov. 2020 à 06:08

1 réponse

Meilleure réponse

Vous devez créer une expression réactive pour pouvoir récupérer l'ensemble de données choisi avec input$Selector. En utilisant get vous recherchez un objet avec un nom donné, celui fourni par input$Selector dans ce cas.

server <- function(input, output) {

          df <- reactive({ 
                 get(input$Selector) 
                }) 

         output$mymap <- renderLeaflet({
                # df its updated everytime input$Selector changes
                leaflet(df()) %>% 
                addPolygons(popup = ~label, weight = 1)
                })
}  
0
csmontt 18 nov. 2020 à 13:31