Вы пытаетесь сделать Shiny-App из этого? Я написал что-то похожее для Siny-App, где отображаются только легенды о кликнувших группах.
Если оно не должно быть блестящим приложением, вы можете сделать что-то вроде этого (вы должны назначить карту листовки для переменной (в данном случае «map»). Таким образом, вы можете вызвать ее и впоследствии адаптировать.
map <- leaflet(data = quakes) %>% addTiles() %>%
addMarkers(~long, ~lat, icon = leafIcons, group = "Group A") %>%
addMarkers(~long, ~lat, icon = leafIcons, group = "Group B") %>%
addControl(html = html_legend, position = "bottomleft") %>%
addLayersControl(position = "topleft", overlayGroups = c("Group A","Group B"))
groups <- map$x$calls[[5]]$args[[2]]
activeGroup <- map$x$calls[[3]]$args[[5]]
if (any(activeGroup %in% "Group A")) {
map %>% addLegend(title="Group A", position="bottomright", opacity=1, colors="red",
labels = "Group A")}
if (any(activeGroup %in% "Group B")) {
map %>% addLegend(title="Group B", position="bottomright", opacity=1,colors="green",
labels = "Group B")}
Переменная groups хранит все группы, которые находятся под рукой, а activeGroup хранит группы, которые активны в данный момент.
Затем вы можете использовать его с некоторыми операторами if-else, чтобы показать только легенду активной группы.
Хотя он не будет интерактивным, как обычный R-скрипт. Вы должны были бы повторно вызвать activeGroup-call, чтобы проверить, какие группы все еще активны. В Shiny эта интерактивность будет дана.
Вот вам реализация блестящего приложения:
ui <- fluidPage(
leafletOutput("map")
)
server <- function(input, output, session){
output$map <- renderLeaflet({
map <- leaflet(data = quakes) %>% addTiles() %>%
addMarkers(~long, ~lat, icon = leafIcons, group = "Group A") %>%
addMarkers(~long, ~lat, icon = leafIcons, group = "Group B") %>%
addControl(html = html_legend, position = "bottomleft")
addLayersControl(position = "topleft", overlayGroups = c("Group A","Group B"))
map
})
observe({
map <- leafletProxy("map") %>% clearControls()
if (any(input$map_groups %in% "Group A")) {
map <- map %>% addLegend(title="Group A", position="bottomright", opacity=1, colors="red",labels = "Group A")}
if (any(input$map_groups %in% "Group B")) {
map <- map %>% addLegend(title="Group B", position="bottomright", opacity=1,colors="green",labels = "Group B")}
})
}
shinyApp(ui, server)