繁体   English   中英

删除为反应数据帧创建的 R 闪亮应用程序中的标记

[英]Remove marker in R shiny app created for reactive dataframe

在我闪亮的应用程序中,数据是从 PostgreSQL 数据库加载的。 数据库可以在会话期间从应用程序更新,因此数据被加载到反应数据帧。 它有 lon/lat 并显示在传单地图上。 我希望通过单击来删除地图中的标记。 没有反应数据,它以适当的方式工作。 我期待帮助了解问题所在。 示例代码如下(removeMarker 后未删除标记)

library(shiny)
library(leaflet)
library(dplyr)

ui<-fluidPage(
  leafletOutput("map1")
)

server <- function(input,output,session){
  getPoints0 <- function(){
    mydf <- head(quakes,10)
    mydf <- mydf %>% mutate(myid = row_number())
    return(mydf)
  }

  df<-reactiveVal(getPoints0());

  output$map1 <- renderLeaflet({
   leaflet(data=df()) %>%
      addTiles() %>%
      addMarkers(
        lng = ~long,
        lat = ~lat,
        layerId = ~myid,
        label = paste0("LayerId = ",df()$myid))
  })

  observe(
    leafletProxy("map1") %>%
      removeMarker(input$map1_marker_click$id)
  )
}
shinyApp(ui = ui,server = server)

我查看了?removeMarker文档并注意到layerId参数要求一个字符向量 -

layerId:字符向量; 要删除的项目的层 ID

我做了以下更改,它对我有用-

  output$map1 <- renderLeaflet({
    leaflet(data=df()) %>%
      addTiles() %>%
      addMarkers(
        lng = ~long,
        lat = ~lat,
        layerId = ~as.character(myid), # here's the change
        label = paste0("LayerId = ", df()$myid))
  })

您还可以在getPoints0()上游进行更改,即myid = as.character(row_number())以便myid始终是下游character

PS:很好的可重现问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM