基于多个反应式表达式动态更改传单地图
Change Leaflet Map Dynamically based on Multiple Reactive expressions
在示例数据框 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)
在 UI 下,我使用了 hasTV 的 radiobuttons
到 select 选项,checkboxGroupInput
到 select 性别和 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)
在服务器函数中,我有多个基于输入 selected 的反应式表达式。这就是我实现表达式的方式。
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,]
})
我已经渲染了传单地图。但是,只要所有这三个输入都以某种方式 selected,我希望我的地图发生变化。例如如果一个人 selects,性别=男性,位置=德国并且 hasTV=否,则在地图上绘制具有正确 gps 的适当地图。
到目前为止,我只能使用一个反应式表达式来更新传单地图,如下所示。
observe(leafletProxy("mymap", data = filtered_loc()) %>%
clearMarkers()%>%
addMarkers(radius =3)%>%
label = ~htmlEscape(DF$hasTV)
)
我该如何合并其他反应式表达式,以便地图相应地发生变化。谢谢。
您需要将所有这些过滤器移动到一个反应式中并在传单图中使用它 -
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
)
在示例数据框 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)
在 UI 下,我使用了 hasTV 的 radiobuttons
到 select 选项,checkboxGroupInput
到 select 性别和 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)
在服务器函数中,我有多个基于输入 selected 的反应式表达式。这就是我实现表达式的方式。
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,]
})
我已经渲染了传单地图。但是,只要所有这三个输入都以某种方式 selected,我希望我的地图发生变化。例如如果一个人 selects,性别=男性,位置=德国并且 hasTV=否,则在地图上绘制具有正确 gps 的适当地图。
到目前为止,我只能使用一个反应式表达式来更新传单地图,如下所示。
observe(leafletProxy("mymap", data = filtered_loc()) %>%
clearMarkers()%>%
addMarkers(radius =3)%>%
label = ~htmlEscape(DF$hasTV)
)
我该如何合并其他反应式表达式,以便地图相应地发生变化。谢谢。
您需要将所有这些过滤器移动到一个反应式中并在传单图中使用它 -
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
)