R Селектор блестящих листовок для отображения шейп-файла

#r #shinydashboard #shapefile #shiny-reactivity #r-leaflet

#r #shinydashboard #шейп-файл #блестящий -реактивность #r-листовка

Вопрос:

Новичок в R shiny, новичок в шейп-файлах, новичок в кодировании чего-либо, кроме очистки / анализа данных.

Я хочу отобразить на карте, где конкретные службы доступны в моем штате. У меня есть шейп-файлы для почтовых индексов (почтовых индексов) для моего состояния. У меня есть CSV-файл для 14 различных типов государственных услуг, доступных для почтовых индексов.

Форма CSV-файла должна содержать новую строку для каждой доступной службы (т. Е., Если в этом пригороде доступно 3 службы, у всех будет 3 строки с одинаковым почтовым индексом).

Из CSV я выделил 14 фреймов данных, по одному для каждого типа сервиса. Я сделал внутреннее соединение для каждого из них с шейп-файлом почтового индекса. У меня есть 14 фреймов данных, которые имеют пространственные полигоны только для пригородов, в которых доступна служба.

Я создал всплывающие ярлыки для пригородов, используя тип кода:

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

Я сделал это отдельно для каждого из 14 типов сервисов (ServiceB, ServiceC и так далее), который не кажется элегантным, но он функционирует.

Теперь, вот где я не могу понять, что делать. Как мне использовать селектор для выбора интересующей меня службы и отображения только этой карты?

Я нашел примеры выборочного добавления маркеров и т.д., Но я не могу понять, как использовать селектор для выбора каждого фрейма данных, содержащего только интересующие шейп-файлы. Пожалуйста, дайте мне знать, если я неправильно настроил это с самого начала.

Что я пробовал, так это:

 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)
  

Я могу заставить карту отображаться правильно (но не в соответствии с фактическим выбором ввода), если я заменю жирную часть leflet(input$Selector) на leaflet(serviceA) , поэтому я предполагаю, что часть моего кода неверна, но я не могу найти правильный синтаксис или вы просто не можете поместить результат селектора в это место (полностьюновичок во всем, кроме анализа научных данных, поэтому я, возможно, неправильно понял, что могут делать части пользовательского интерфейса и сервера?).

Спасибо за любые предложения 🙂

Комментарии:

1. Работает ли это, если вы создаете реактивный df на сервере df <- reactive({ get(input$Selector) }), а затем вызываете его внутри листовки. листовка(df()) %>% … Другим вариантом было бы использовать отдельный слой для каждой службы. Как здесь, rstudio.github.io/leaflet/showhide.html

2. да! это работает 🙂 можете ли вы напомнить мне, как я принимаю ваш ответ?

3. Отличные новости! Я опубликовал свой ответ, вы можете принять его сейчас.

Ответ №1:

Вам необходимо создать реактивное выражение, чтобы иметь возможность извлекать выбранный набор input$Selector данных. При использовании get выполняется поиск объекта с заданным именем, которое input$Selector в данном случае указано.

 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)
                })
}