簡體   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