是的,你可以。诀窍是将另一个变量传递给R,这样可以告诉您是在单击节点还是在画布上。如果单击画布,则
node.node
应该是
undefined
。将该信息存储在变量中,将其传递给R,并相应地显示(或不显示)节点信息。
server <- function(input, output, session) {
output$network <- renderVisNetwork({
visNetwork(nodes, edges,
height = "100%", width = "100%",
main = "") %>%
visEvents(click = "function(nodes){
Shiny.onInputChange('click', nodes.nodes[0]);
Shiny.onInputChange('node_selected', nodes.nodes.length);
;}"
)
})
output$shiny_return <- renderPrint({
if (!is.null(input$node_selected) && (input$node_selected == 1)) {
visNetworkProxy("network") %>%
visNearestNodes(target = input$click)
} else {
invisible()
}
})
}
编辑:对评论的回答
observe({
input$node_selected
input$click
if(!is.null(input$node_selected) && (input$node_selected == 1)){
output$networkTable <- renderDataTable(data.frame(x = runif(10),
y = runif(10)))
} else {
output$networkTable <- renderDataTable(NULL)
}
})