在 visNetwork 的 Shiny 中以编程方式取消选择边

Deselect edges programmatically in Shiny in visNetwork

我想在 Shiny 的 visNetwork 网络中去除select 边缘。 visSetSelection 应该有效,但它不起作用:如果我手动 select 一个边缘,然后按下按钮,边缘保持 selected。我不知道还有什么其他方法可以做到这一点。 https://github.com/almende/vis/issues/1670 建议使用 visSelectEdges 并将 id 设置为 NULL 但这也没有效果。有什么想法吗?

require(shiny)
require(visNetwork)

server <- function(input, output) {
  output$network <- renderVisNetwork({
    # minimal example
    nodes <- data.frame(id = 1:3)
    edges <- data.frame(from = c(1,2), to = c(1,3))

    visNetwork(nodes, edges)
  })

  observeEvent("deselect",{
  visNetworkProxy("network") %>%
    visSetSelection(edgesId = NULL,unselectAll = T) 


})
}

ui <- fluidPage(
  visNetworkOutput("network"),
  actionButton("deselect","Deselect")
)

shinyApp(ui = ui, server = server)

您可以使用 visUnselectAll(参见 here)。另外,在observeEvent.

的条件下,需要将"deselect"替换为input$deselect
require(shiny)
require(visNetwork)

server <- function(input, output) {
  output$network <- renderVisNetwork({
    # minimal example
    nodes <- data.frame(id = 1:3)
    edges <- data.frame(from = c(1,2), to = c(1,3))

    visNetwork(nodes, edges)
  })

  observeEvent(input$deselect, {
    visNetworkProxy("network") %>%
      visUnselectAll()

  })
}

ui <- fluidPage(
  visNetworkOutput("network"),
  actionButton("deselect","Deselect")
)

shinyApp(ui = ui, server = server)