按下 R 中的传单弹出窗口时如何创建事件?

How to create an event when pressing on a leaflet popup in R?

我想在单击 Leaflet 多边形时使 tabPanel 在 Shiny 中发生变化。我有几个关于如何做到这一点的想法,但我找不到实现它们所需的信息。我在 tabPanel 中有传单,但我想在单击多边形时切换到另一个选项卡。

    leaflet(llmap) %>%
      addTiles() %>%
      addPolygons(stroke = F,
                  fillOpacity = .8,
                  smoothFactor = .5,
                  color=~pal(x),
                  popup = pop)

我想过制作popup=updateTabsetPanel(session="New Tab"),但那行不通。我的另一个想法是在用户点击一个新的多边形时调用 updateTabsetPanel(session="New Tab"),但我不知道我需要什么事件 return 让它知道一个新的多边形被点击或者即使弹出一个新的弹出窗口。有人知道吗?

这是一个在您单击多边形时更新的反应函数示例:

output$myMap <- renderLeaflet({
    map_out() #this is just a function that returns a leaflet map
  })


output$MyGraph <- renderPlot({  
    event <- input$myMap_shape_click #Critical Line!!!

    ... #Code to run here

    GraphData <- GraphData[event$id] # subsetting example

    }
  })  

这里有几点需要注意:

  1. input$myMap_shape_click 会根据您在上面对地图的称呼进行更改。我把它命名为myMap,所以结构如图。如果您使用 output$YourMap 进行初始化,则将使用 input$YourMap_shape_click

  2. 调用点击
  3. 您点击的多边形的 ID 可以通过 event$id 访问。这对于基于单击的多边形进行子集化+绘图非常有用。也可以访问 event$latevent$lng

  4. renderPlot 可以是任何反应函数。如果它不依赖于特定的输出,您可以使用 observe 如下所示。这样,只要单击多边形,您的代码就会 运行。这是因为每次点击时 input$myMap_shape_click 的值都会改变。

我以前没有用过 updateTabsetPanel,但我想这会起作用:

observe({

  event <- input$myMap_shape_click

  updateTabsetPanel(session, "inTabset", selected = event$id)

}) 

这会将选项卡切换到与您单击的多边形具有相同 ID 的面板。