基于多个反应式表达式动态更改传单地图

时间:2018-10-30 18:31:18

标签: r shiny shinydashboard reactive r-leaflet

在示例数据帧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 :(得分:1)

您需要将所有这些过滤器移动到一个反应堆中,并在传单图中使用它-

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
         )