我对闪亮还很陌生,我面临着一个困难。我想要一张带有互动圈的地图。单击时,这些圆圈将允许我查询 SQL 数据库以获取相应的数据,从而绘制图表。
虽然我可以将其打印到闪亮的用户界面,但我无法将圆圈信息放入变量中。
这是示例代码:
library(shiny)
library(leaflet)
ui <- fluidPage(
leafletOutput("mymap"),
verbatimTextOutput("marker")
)
server <- function(input, output, session) {
output$mymap <- renderLeaflet({
leaflet(data = mapStates, options = leafletOptions(minZoom = 3, maxZoom = 18)) %>%
addTiles() %>%
addProviderTiles(providers$Stamen.TonerLite,
options = providerTileOptions(noWrap = TRUE))%>%
addCircleMarkers(data = data.frame(lat = 51, lng = 13,STANAME = "somewhere",STAID = "1" ), lng = ~lng, lat = ~lat,radius = 1, color = "red", fill = "red", popup = ~STANAME,layerId = ~STAID)
})
# here the circle info
output$marker <- renderPrint(input$mymap_marker_click)
}
shinyApp(ui, server)
但我无法将标记的 id 放入服务器函数中的变量中。我试过:
input$mymap_marker_click$id
但它告诉我,我需要一个反应式上下文。如果我这样做:
renderPrint(input$mymap_marker_click)$id
错误:“闭包”类型的对象不可取子集
我无法使用服务器端的输出,但我需要服务器端的这个变量来执行查询和绘图。
我该如何进行?
在 Shiny 中,您需要创建一个观察者来“监听”点击事件(或任何事件/输入更改)并执行特定响应。
删除地图图块,因为我不知道
mapStates
来自哪里,但想法是相同的。
library(shiny)
library(leaflet)
ui <- fluidPage(
leafletOutput("mymap"),
verbatimTextOutput("marker")
)
server <- function(input, output, session) {
output$mymap <- renderLeaflet({
leaflet(options = leafletOptions(minZoom = 3, maxZoom = 18)) %>%
addCircleMarkers(data = data.frame(lat = 51, lng = 13,STANAME = "somewhere",STAID = "1" ), lng = ~lng, lat = ~lat,radius = 1, color = "red", fill = "red", popup = ~STANAME,layerId = ~STAID)
})
# needs to be in a observer to "listen" for events
observeEvent(input$mymap_marker_click, {
output$marker <- renderPrint(input$mymap_marker_click$id)
})
}
shinyApp(ui, server)