r-根据传单标记点击更新选择输入



My Shiny应用程序使用基于传单标记点击的值更新selectizeInput小部件。

selectizeInput小部件允许多个站点选择,我设法找到了如何使用以下代码根据传单地图标记点击来更新所选站点列表。

library(tidyverse)
library(shiny)
library(shinydashboard)
library(leaflet)

sensor_locations <- data.frame(site_id=c("Site1","Site2","Site3","Site4","Site5"),
latitude=c(-37.80079, -37.80052, -37.80230, -37.80058, -37.80063),
longitude=c(144.9665, 144.9641, 144.9609, 144.9646, 144.9651))
ui <- fluidPage(

fluidRow(
sidebarPanel(width = 3,
selectizeInput("selectedSites", "Select Sites :",
choices =  c("Site1","Site2","Site3","Site4","Site5"),
multiple = TRUE,
selected = c("Site1","Site2"),
options = list('plugins' = list('remove_button'))),
fluidRow(leafletOutput("sitemap"))
))
)

server <- function(input, output, session) {

output$sitemap <- renderLeaflet({

leaflet(data = sensor_locations,
options = leafletOptions(zoomControl = FALSE)) %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addCircleMarkers(layerId = ~site_id,
label = ~site_id,
radius= 15,
opacity = 1)
})

observeEvent(input$sitemap_marker_click, {
click <- input$sitemap_marker_click
updateSelectInput(session, "selectedSites", 
selected = c(input$selectedSites, click$id))
})

}
shinyApp(ui = ui, server = server)

我的应用程序目前允许在单击时将站点添加到所选列表中,现在我还希望允许用户在单击传单标记时取消选择站点(在选择输入框中从所选列表删除(。

您可以这样做:

observeEvent(input$sitemap_marker_click, {
click <- input$sitemap_marker_click
if(click$id %in% input$selectedSites)
selected = input$selectedSites[input$selectedSites != click$id]
else
selected = c(input$selectedSites, click$id)
updateSelectInput(session, "selectedSites", 
selected = selected)
})

如果你喜欢更简洁(可读性较差(的代码:

observeEvent(input$sitemap_marker_click, {
click <- input$sitemap_marker_click
updateSelectInput(session, "selectedSites", 
selected = c(click$id[!click$id %in% input$selectedSites], 
input$selectedSites[input$selectedSites != click$id]))
})

最新更新