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