删除为反应性数据框创建的 R Shiny 应用程序中的标记
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: character vector; the layer id(s) of the item to remove
我进行了以下更改并且对我有用 -
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:很好的可重现问题!
在我闪亮的应用程序中,数据是从 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: character vector; the layer id(s) of the item to remove
我进行了以下更改并且对我有用 -
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:很好的可重现问题!