Этот ответ носит иллюстративный характер.Но, как упоминалось в комментариях выше, ваша функциональность может быть достигнута с помощью updateSelectInput, а ваша база данных может быть запрошена в реактиве, который ищет новые узлы, добавленные в сеть.Вот пример, где узлы добавляются каждую минуту в сеть.
library(shiny)
library(visNetwork)
library(lubridate)
#Values to initialize
nodes <- data.frame(id = 2:4)
edges <- data.frame(from = c(2,3), to = c(2,4))
server <- function(input, output,session) {
data = reactivePoll(1000,session,
checkFunc = function(){
# SELECT MAX(timestamp) FROM table
#For illustration it triggeres every minute
minute(Sys.time())
},
valueFunc = function(){
#SELECT * FROM table
nodes <<- rbind(nodes,data.frame(id = minute(Sys.time())))
edges <<- rbind(edges,data.frame(from = c(minute(Sys.time())),to = 2))
return(list(nodes = nodes,edges = edges))
}
)
#Use the dataframe of nodes you got above to set the updateSelectInput
observe({
req(data())
updateSelectInput(session,"Focus",choices = data()$nodes$id)
})
output$network_proxy_nodes <- renderVisNetwork({
# minimal example
visNetwork(data()$nodes, data()$edges) %>% visNodes(color = "blue")
})
observe({
req(input$Focus)
visNetworkProxy("network_proxy_nodes") %>%
visFocus(id = input$Focus, scale = 4)
})
}
ui <- fluidPage(
fluidRow(
column(
width = 4,
selectInput("Focus", "Focus on node :",nodes$id)
),
column(
width = 8,
visNetworkOutput("network_proxy_nodes", height = "400px")
)
)
)
shinyApp(ui = ui, server = server)