2016-10-06 3 views
1

visNetwork 그래프에서 노드/에지 데이터를 가져 오려고합니다. 예제 코드를 사용하고 있지만 작동하지 않습니다. 나는 이것을 Shiny와 함께하려고 노력하고있다. 내 목표는 네트워크에서 노드 및 에지 데이터를 가져 와서 테이블에 표시하는 것입니다. 내가 얻을 수있는 도움을 크게 주심을 감사드립니다.visNetwork 그래프에서 노드 및 에지 데이터 가져 오기

require(shiny) 
require(visNetwork) 

server <- function(input, output) { 

    output$network_proxy_nodes <- 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$edges_data_from_shiny <- renderPrint({ 
    if(!is.null(input$network_proxy_get_edges)){ 
     input$network_proxy_get_edges 
    } 
    }) 

    observe({ 
    input$getEdges 
    visNetworkProxy("network_proxy_get") %>% 
     visGetEdges() 
    }) 

    output$nodes_data_from_shiny <- renderPrint({ 
    if(!is.null(input$network_proxy_get_nodes)){ 
     input$network_proxy_get_nodes 
    } 
    }) 

    observe({ 
    input$getNodes 
    visNetworkProxy("network_proxy_get") %>% 
     visGetNodes() 
    }) 
} 

ui <- fluidPage(
    visNetworkOutput("network_proxy_nodes", height = "100%"), 
      verbatimTextOutput("edges_data_from_shiny "), 
      verbatimTextOutput("nodes_data_from_shiny"), 
      actionButton("getNodes", "Nodes"), 
      actionButton("getEdges", "Edges") 
) 

shinyApp(ui = ui, server = server) 

답변

2

코드의 주된 문제는 네트워크 output$network_proxy_nodes의 이름이 사방에 일치하지 않는 점이다 감사합니다,

여기 내 코드입니다.

이 에지 정보를 얻을 수 및 일반 텍스트에 표시하고, 노드 정보를 얻을 DataTable을로 표시하는 코드의 작업 조각 :

require(shiny) 
require(visNetwork) 

server <- function(input, output, session) { 
    nodes <- data.frame(id = 1:3, 
         name = c("first", "second", "third"), 
         extra = c("info1", "info2", "info3")) 
    edges <- data.frame(from = c(1,2), to = c(1,3), id= 1:2) 

    output$network_proxy <- renderVisNetwork({ 
    visNetwork(nodes, edges) 
    }) 


    output$nodes_data_from_shiny <- renderDataTable({ 
    if(!is.null(input$network_proxy_nodes)){ 
     info <- data.frame(matrix(unlist(input$network_proxy_nodes), ncol = dim(nodes)[1], 
         byrow=T),stringsAsFactors=FALSE) 
     colnames(info) <- colnames(nodes) 
     info 
    } 
    }) 
    output$edges_data_from_shiny <- renderPrint({ 
    if(!is.null(input$network_proxy_edges)){ 
     input$network_proxy_edges 
    } 
    }) 

    observeEvent(input$getNodes,{ 
    visNetworkProxy("network_proxy") %>% 
     visGetNodes() 
    }) 

    observeEvent(input$getEdges, { 
    visNetworkProxy("network_proxy") %>% 
     visGetEdges() 
    }) 
} 

ui <- fluidPage(
    visNetworkOutput("network_proxy", height = "400px"), 
    verbatimTextOutput("edges_data_from_shiny"), 
    dataTableOutput("nodes_data_from_shiny"), 
    actionButton("getEdges", "Edges"), 
    actionButton("getNodes", "Nodes") 
) 

shinyApp(ui = ui, server = server) 
+0

덕분에 많이! 나는이 코드를 작동시킬 수 있었다. 최고, SB – AquieJo

+0

안녕하세요. @AquieJo! 그것이 효과가 있다면 "최상의 답"으로 받아 들일 수 있습니다 (답변의 왼쪽에 녹색 진드기가 나타나고 다른 사람들이 귀하의 질문에 답하는 것을 알 수 있도록). – xclotet

관련 문제