由于我在此网站(shinyTree: set variable to value if checkbox is checked,shinyTree: view without selecting)上多次投诉,因此shinyTree
上的文档严重缺乏。
请考虑R
中的以下代码:
library(shiny)
library(shinyTree)
ui <- shinyUI(
shiny::fluidPage(
h4('Shiny hierarchical checkbox'),
shinyTree("tree", checkbox = TRUE),
# slider
sliderInput("slider_input",
"Slider",
min = 0,
max = 100,
value = 0,
step = 0.1,
width = '100%'),
width = 8)
)
server <- shinyServer(function(input, output, session) {
output$tree <- renderTree({
sss=list( 'I lorem impsum'= list(
'I.1 lorem impsum' = structure(list('I.1.1 lorem impsum'='1', 'I.1.2 lorem impsum'='2'),stopened=TRUE),
'I.2 lorem impsum' = structure(list('I.2.1 lorem impsum'='3'), stopened=TRUE)))
attr(sss[[1]],"stopened")=TRUE
sss
})
})
shinyApp(ui, server)
我感兴趣的是,当且仅当选择了树中的sliderInput
时才显示I.1.1 lorem impsum
。
我知道在使用checkboxGroupInput
时,我可以使用conditionalPanel javascript condtions in shiny: is there R %in% operator in javascript?处的内容。这一切都很好,但是由于缺乏关于shinyTree
的文档(以及本网站上没有提出的问题),我不确定如何解决这个问题。 我知道我需要使用conditionalPanel
,但我不知道如何在函数的condition
参数中引用树及其节点。更重要的是,树本身不在input
中(因为它在声明时没有input$
),我无法引用{{1}据我所知,变量。
我知道output$
必须用JavaScript编写,但如果我不知道如何引用树及其节点,这是没用的。
答案 0 :(得分:1)
在服务器端渲染滑块
library(shiny)
library(shinyTree)
ui <- shinyUI(
shiny::fluidPage(
h4('Shiny hierarchical checkbox'),
shinyTree("tree", checkbox = TRUE),
# slider
uiOutput("slider_ui"),
width = 8)
)
server <- shinyServer(function(input, output, session) {
output$tree <- renderTree({
sss=list( 'I lorem impsum'= list(
'I.1 lorem impsum' = structure(list('I.1.1 lorem impsum'='1', 'I.1.2 lorem impsum'='2'),stopened=TRUE),
'I.2 lorem impsum' = structure(list('I.2.1 lorem impsum'='3'), stopened=TRUE)))
attr(sss[[1]],"stopened")=TRUE
sss
})
output$slider_ui=renderUI({
if('I.1.1 lorem impsum' %in% get_selected(input$tree)){
sliderInput("slider_input",
"Slider",
min = 0,
max = 100,
value = 0,
step = 0.1,
width = '100%')
}
})
})
shinyApp(ui, server)
shinyjs变种
library(shiny)
library(shinyTree)
library(shinyjs)
ui <- shinyUI(
shiny::fluidPage(
useShinyjs(),
h4('Shiny hierarchical checkbox'),
shinyTree("tree", checkbox = TRUE),
# slider
sliderInput("slider_input",
"Slider",
min = 0,
max = 100,
value = 0,
step = 0.1,
width = '100%'),
width = 8)
)
server <- shinyServer(function(input, output, session) {
output$tree <- renderTree({
sss=list( 'I lorem impsum'= list(
'I.1 lorem impsum' = structure(list('I.1.1 lorem impsum'='1', 'I.1.2 lorem impsum'='2'),stopened=TRUE),
'I.2 lorem impsum' = structure(list('I.2.1 lorem impsum'='3'), stopened=TRUE)))
attr(sss[[1]],"stopened")=TRUE
sss
})
observe({
if('I.1.1 lorem impsum' %in% get_selected(input$tree)){
show("slider_input")
}else{
hide("slider_input")
}
})
})
shinyApp(ui, server)