Динамическое изменение карты листовок на основе множественных реактивных выражений - PullRequest
0 голосов
/ 30 октября 2018

В примере фрейма данных DF у меня есть следующие столбцы.

gender <- c("Male", "Female","Female", "Male")
Location <- c("AB", "BC", "CD", "DE")
hasTV <- c("Yes","Yes","No","No")
Latitude <- c(49.82380908513249,59.478568831926395,59.478568831926395,49.82380908513249)
Longitude <- c(-10.8544921875,-10.8544921875,2.021484375,2.021484375)
DF <- data.frame(gender,Location,hasTV,Latitude,Longitude)

В пользовательском интерфейсе я использовал radiobuttons для выбора параметров из hasTV, checkboxGroupInput для выбора пола и selectInput для создания раскрывающегося списка местоположения. Я реализовал это в fluidRow, как показано ниже.

sex <- unique(DF$gender)
loc <- unique(DF$Location)
hastv <- unique(DF$hasTV)

radioButtons("radio_hastv",label = "Has TV", choices = hastv, selected = "Yes")
checkboxGroupInput("checkbox_gender", label = "Gender", choices = sex, selected = sex)
selectInput("Location", label = "Location", choices=loc, selected = "AB")
leafletOutput("mymap", height = 415)

В функции сервера у меня есть несколько реактивных выражений на основе выбранного входа. Вот как я реализовал выражения.

 filtered_gender <- reactive({
   DF[DF$gender == input$checkbox_gender,]
 })

 filtered_hastv <- reactive({
   DF[DF$hasTV == input$radio_hastv,]
 })

 filtered_loc <- reactive({
   DF[DF$Location == input$loc,]
 })

Я уже выложил карту листовки. Тем не менее, я хотел бы, чтобы моя карта менялась всякий раз, когда все эти три входа как-то выбираются. например если человек выбирает, пол = мужской, местоположение = DE и hasTV = нет, на карте отображается соответствующая карта с правильным gps.

Пока что я могу обновить только карту листовок, используя одно реактивное выражение, как показано ниже.

 observe(leafletProxy("mymap", data = filtered_loc()) %>%
           clearMarkers()%>%
           addMarkers(radius =3)%>%
           label = ~htmlEscape(DF$hasTV)
         )  

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

1 Ответ

0 голосов
/ 30 октября 2018

Вам нужно переместить все эти фильтры в один реактив и использовать его в своем листе-листе -

library(dplyr)

filtered_data <- reactive({
   DF %>%
     filter(gender %in% input$checkbox_gender,
            hasTV %in% input$radio_hastv,
            Location %in% input$loc
            )
 })

 observe(leafletProxy("mymap", data = filtered_data()) %>%
           clearMarkers()%>%
           addMarkers(radius =3)%>%
           label = ~htmlEscape(hasTV) # note change; using DF here is wrong
         )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...