我正在尝试在 R闪亮中构建一个应用程序,用户可以在其中了解有关地图上的点的详细信息。当用户单击某个点时,弹出窗口会显示一些初始详细信息,然后显示一个 ActionButton(或 ActionLink)。当用户单击该 ActionButton 时,ObserveEvent 反应式启动一个模式对话框,显示有关该点的更多信息。我已经准备好了地图、操作按钮和模式对话框。但是,我不知道如何将每个 ActionButton“分配”到地图上的点/弹出窗口。有没有办法让每个 ActionButton 从地图上各自的点继承其 ID,然后将该信息传递给启动模态对话框的 ObserveEvent?下面的工作示例:
library(shiny)
library(leaflet)
library(DT)
##Setup##
mapdata <- quakes
mapdata$latitude <- as.numeric(mapdata$lat)
mapdata$longitude <- as.numeric(mapdata$long)
ui <- fluidPage(
leafletOutput("mymap")
)
server <- function(input, output, session) {
observeEvent(input$button_click, {
showModal(modalDialog(
title = "More Details",
renderDataTable({
df <- mapdata[1,]
x <- as.data.frame(cbind(colnames(df),t(df)),row.names = F);colnames(x) <- c("Field","Value")
x
})
))
})
output$mymap <- renderLeaflet({
leaflet(options = leafletOptions(maxZoom = 18)) %>% addTiles() %>%
addMarkers(lat = ~ latitude, lng = ~ longitude,
data = mapdata,
popup= ~paste("<b>", mag, "</b></br>", actionLink(inputId = "modal", label = "View Details", onclick = 'Shiny.setInputValue(\"button_click\", this.id, {priority: \"event\"})')))
})
}
###How can I assign an inputID to each action link that matches the id for that action links point?
shinyApp(ui, server)
我在上面留下了评论,但我相信这应该是一个可行的例子。也感谢我在这个问题上苦苦挣扎,这让我找到了答案。
library(shiny)
library(leaflet)
library(DT)
##Setup##
mapdata <- quakes
mapdata$latitude <- as.numeric(mapdata$lat)
mapdata$longitude <- as.numeric(mapdata$long)
mapdata$id <- 1:nrow(mapdata)
ui <- fluidPage(
leafletOutput("mymap")
)
server <- function(input, output, session) {
observeEvent(input$button_click, {
clicked_point <- reactiveVal(input$mymap_marker_click)
showModal(modalDialog(
title = "More Details",
renderDataTable({
df <- mapdata[mapdata['id'] == clicked_point()$id,]
x <- as.data.frame(cbind(colnames(df),t(df)),row.names = F);colnames(x) <- c("Field","Value")
x
})
))
})
output$mymap <- renderLeaflet({
leaflet(options = leafletOptions(maxZoom = 18)) %>% addTiles() %>%
addMarkers(lat = ~ latitude, lng = ~ longitude,
data = mapdata,
layerId = mapdata$id,
popup= ~paste("<b>", mag, "</b></br>", actionLink(inputId = "modal", label = "View Details", onclick = 'Shiny.setInputValue(\"button_click\", this.id, {priority: \"event\"})')))
})
}
shinyApp(ui, server)