어떤 노드가 선택되었는지에 따라 노드의 색상이 동적으로 변경되는 앱을 만들고 싶습니다. (개념은 전염 모델의 출력을 표시하는 것입니다. 강조 표시된 노드는 선택한 노드에서 전염성이있는 기본값을 경험할 수있는 노드이므로 강조 표시해야하는 모든 직접 연결된 노드 만은 아닙니다. 원칙적으로 이것은 노드의 그룹 속성을 visUpdateNodes
으로 업데이트함으로써 가능해야하지만, 매우 이상하게 행동하는 것 같습니다 :Shiny/visNetwork의 네트워크 플롯 : 동적 그룹 할당과 일치하지 않는 동작
노드의 그룹 속성을 간단히 변경하면 앱은 이전에 "기억"합니다 색깔이있는 노드 - 즉, 현재 선택된 노드 아래에 있지 않아도 한 번 색칠 된 모든 노드는 색이 유지됩니다. 나는 솔직히 그것이 왜 그런지 전혀 모른다. 내가 아는 모든 디버깅 트릭을 시도했지만 대답을 얻을 수 없었다. 모든 그룹 속성을 재설정하는 두 번째 관찰자 기능으로 해결 방법을 만들 수있었습니다. RStudio에서 내 로컬 Windows 컴퓨터에서 응용 프로그램을 실행하면 작동하지만 이상하게도 내 (Linux 기반) 서버에서 실행하면 작동하지 않습니다. 이 앱은 단순히 노드를 색칠하지 않습니다 (코드가 실행되었음을 나타내는 색상의 빠른 스파크가 표시 되더라도 두 번째 oberserver 함수가 다시 호출되어 속성이 지워지더라도).
global.R : 아래의 예는 문제를 보여줍니다
id <- c(1,2,3,4,5)
group <- rep("",5)
nodes <- data.frame(id,group)
from <- c(1,1,1,2,2,2,3)
to <- c(2,3,4,1,3,5,5)
edges <- data.frame(from,to)
def1 <- c("","Default","Default","","")
def2 <- c("","","Default","Default","")
def3 <- c("","","","Default","")
def4 <- c("","","","","Default")
def5 <- c("","","","","")
defs <- data.frame(def1,def2,def3,def4,def5)
server.R :
library(shiny)
shinyServer(function(input, output) {
output$netplot <- renderVisNetwork({
visNetwork(nodes,edges)%>%
visGroups(
groupname = "Default", color = list(
background = "red"
)
) %>%
visOptions(
nodesIdSelection = list(
enabled = TRUE
)
)
})
observe({
if (!is.null(input$netplot_selected)) {
nodes$group <- rep("A",5)
visNetworkProxy("netplot") %>% visUpdateNodes(nodes)
}
})
observe({
if (!is.null(input$netplot_selected)) {
if(input$netplot_selected!="") {
newgroup <- defs[,as.numeric(input$netplot_selected)]
nodes$group <- newgroup
}
}
visNetworkProxy("netplot") %>% visUpdateNodes(nodes)
})
})
ui.R :
library(visNetwork)
shinyUI(fluidPage(mainPanel(visNetworkOutput("netplot"))))