R 如何通过再次单击功能删除使用Shiny和mapedit进行的选择?

R 如何通过再次单击功能删除使用Shiny和mapedit进行的选择?,r,shiny,r-leaflet,R,Shiny,R Leaflet,使用Shiny、传单和mapedit软件包,我可以使用下面的代码生成包含多个系列的图形 直观地说,我想第二次点击一个选中的地图图标,相关数据就会从图中删除。基本上,可以打开或关闭单击事件 有人有什么建议吗 # devtools::install_github("r-spatial/sf") # devtools::install_github("r-spatial/mapview@develop") # devtools::install_github("bhaskarvk/leaflet.ex

使用Shiny、传单和mapedit软件包,我可以使用下面的代码生成包含多个系列的图形

直观地说,我想第二次点击一个选中的地图图标,相关数据就会从图中删除。基本上,可以打开或关闭单击事件

有人有什么建议吗

# devtools::install_github("r-spatial/sf")
# devtools::install_github("r-spatial/mapview@develop")
# devtools::install_github("bhaskarvk/leaflet.extras")
# devtools::install_github("r-spatial/mapedit")
library(tidyverse)
library(sf)
library(leaflet)
library(mapedit)
library(mapview)
library(shiny)
library(shinyjs)

locnCoord <-
  data.frame(location = c('Sit1','Site2','Site3'),
             lat=c(-18.1, -18.3, -18.4),
             lon=c(145.8, 145.9, 145.9)) %>%
  mutate(depth = runif(3))

locnSF <- st_as_sf(locnCoord, coords = c('lon','lat'), crs="+proj=longlat +datum=WGS84 +no_defs")

#### User input

ui <- fluidPage(
  shinyjs::useShinyjs(),
  shinyjs::extendShinyjs(text = "shinyjs.refresh = function() { location.reload(); }"),
  fluidRow(
    # edit module ui
    column(6,
           selectModUI("selectmap"),
           actionButton("refresh", "Refresh Map")
           ),
    column(6,
           h3("Point of Depth"),
           plotOutput("selectstat")
           )
    )
  )

#### Server

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

  observeEvent(input$refresh, {
    shinyjs::js$refresh()
  })

  g_sel <- callModule(
    selectMod,
    "selectmap",
    leaflet() %>%
      addTiles() %>%
      addFeatures(
        data = locnSF,
        layerId = ~location,
        stroke = TRUE,
        color = 'orange',
        fill = TRUE,
        fillColor = 'black',
        radius=10)
  )

  rv <- reactiveValues(selected=NULL)

  observe({
    gs <- g_sel()

    if(length(gs$id) > 0) {
      rv$selected <- locnSF %>% filter(location %in% gs$id)
    } else {
      rv$selected <- NULL
    }
  })

  output$selectstat <- renderPlot({
    ggplot()
    if(!is.null(rv$selected) && nrow(rv$selected) > 0) {
      ggplot(data=rv$selected, aes(location, depth))+
        geom_point(color='red', size=5)
    } else {
      ggplot()
    }
  })
}
shinyApp(ui, server)
#devtools::install_github(“r-spatial/sf”)
#devtools::安装\u github(“r-spatial/mapview@develop")
#开发工具:安装github(“bhaskarvk/传单.附加文件”)
#devtools::install_github(“r-spatial/mapedit”)
图书馆(tidyverse)
图书馆(sf)
图书馆(单张)
库(地图编辑)
图书馆(地图视图)
图书馆(闪亮)
图书馆(shinyjs)
LOCNCORD%
变异(深度=runif(3))

locnSF这是有效的。在您的服务器中,尝试以下操作:

observe({
   gs <- g_sel()

   if(length(gs$id) > 0) {
     site_select <- c(gs$selected)
     rv$selected <- locnSF %>% filter(location %in% gs$id) %>% 
       mutate(keeps = site_select) %>% filter(keeps == "TRUE")
   } else {
     rv$selected <- NULL
   }
})
观察({
一般事务(0){
站点选择%
mutate(keeps=site\u select)%>%过滤器(keeps==“TRUE”)
}否则{

非常感谢您的帮助。