我想根据用户提供的输入值过滤闪亮树中的节点。我有一个初步尝试,但问题是树在输入后不保持状态,例如打开/关闭节点或选定节点。例如,在下面的示例代码中,假设我扩展了 1-3a 和 4-6,并选择了值 3 和 5。
如果我将滑块移动到 2,这应该从 1-3a 和 1-3b 中删除 1 条目,我想保持 1-3a 和 4-6 展开,并检查值 3-6。但是,我每次都从头开始创建树,所以所有状态都丢失了。
有没有办法在闪亮的树中显示/隐藏节点以保持状态?
library(shiny)
library(shinyTree)
library(dplyr)
dat <- tibble(
grp=rep(c("1-3a","1-3b","4-6"),each=3),
leaf=c(1:3,1:3,4:6),
val=c(1:3,1:3,4:6),
)
#' Recursively walks down the columns of a dataframe making nested groups
listTree <- function(dat) {
if(ncol(dat) > 2) {
x <- dat %>% nest(data=-1)
lst <- as.list(x[[2]])
names(lst) <- x[[1]]
lst %>% map(listTree)
} else if(ncol(dat)==2) {
lst<-as.list(dat[[2]])
names(lst)<-dat[[1]]
return(lst)
} else if(ncol<2) {
stop('ERROR')
}
}
ui <- fluidPage(
p('Filter nodes < selected value'),
sliderInput("num", "Value",
min = 1, max = 6, value = 1),
shinyTree("tree",checkbox=TRUE)
)
server <- function(input, output, session) {
datr <- reactive({
dat %>% filter(val >= input$num)
})
output$tree <- renderTree({listTree(datr())})
}
shinyApp(ui, server)