visNetwork:如何从闪亮的R坐标矩阵中提取visGetPositions()?

时间:2016-03-12 18:42:02

标签: r shiny

require(shiny)
require(visNetwork)

server <- function(input, output) {

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

    visNetwork(nodes, edges) %>% visNodes(color = "green")
  })

  output$test <- renderPrint({
    input$network_positions
  })
  observe({
    input$goButton
    visNetworkProxy("network") %>%
      visGetPositions()
  })

}

ui <- fluidPage(
  fluidRow(
    column(10,visNetworkOutput("network", height = "100%"),
           verbatimTextOutput("test")),
    column(2, actionButton("goButton", "Go!"))
  )

)

shinyApp(ui = ui, server = server)

所以visGetPositions只适用于闪亮。按Go后,它会计算并打印出每个节点的位置。如何将其提取到R矩阵中,以便将其用作坐标?

1 个答案:

答案 0 :(得分:2)

一种可能性是将坐标存储在reactiveValues中,并将其与rbind绑定在一起。例如,用以下内容替换您的观察者,

vals <- reactiveValues(coords=NULL)
observeEvent(input$goButton, {
  visNetworkProxy("network") %>% visGetPositions()
  vals$coords <- if (!is.null(input$network_positions)) 
                   do.call(rbind, input$network_positions)
})

它检查NULL,因此do.call没有错误。然后,output$test更改为以下内容以检查结果

output$test <- renderPrint( vals$coords )

更新

使用invalidateLater

在没有按钮的情况下更新职位的可能方法
output$test <- renderPrint( vals$coords )
vals <- reactiveValues(coords=NULL)
observe({
  invalidateLater(1000)
  visNetworkProxy("network") %>% visGetPositions()
  vals$coords <- if (!is.null(input$network_positions)) 
                   do.call(rbind, input$network_positions)
})