【问题标题】:visNetwork: How do I extract visGetPositions() from shiny into R coordinates matrix?visNetwork:如何将 visGetPositions() 从闪亮提取到 R 坐标矩阵?
【发布时间】:2016-03-12 18:42:01
【问题描述】:
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 矩阵中,以便将其用作坐标?

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    一种可能性是将坐标存储在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)
    })
    

    【讨论】:

    • 您好,有没有自动定义位置的方法?我有SO question here。请您看看并感谢您的任何意见。
    猜你喜欢
    • 2018-02-18
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2021-11-21
    • 2018-04-17
    • 2017-02-20
    • 2013-06-20
    • 2018-05-18
    相关资源
    最近更新 更多