由于我在该站点(shinyTree: set variable to value if checkbox is checkedshinyTree: 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)


javascript - 基于ShinyTree选择值的conditionalPanel-LMLPHP

我有兴趣让sliderInput出现,当且仅当选择树中的I.1.1 lorem impsum时。

我知道使用checkboxGroupInput时可以使用conditionalPanel javascript condtions in shiny: is there R %in% operator in javascript?中的内容。一切都很好,但由于缺乏有关shinyTree的文档(并且缺少本网站上提出的问题),我不确定如何解决此问题。我知道我需要使用conditionalPanel,但是我不知道如何在函数的condition参数中引用树及其节点。更为复杂的是,树本身不在input中(因为声明时它没有input$),据我所知,我无法引用output$变量。

我确实知道condition必须用JavaScript编写,但是如果我不知道如何引用树及其节点,这将毫无用处。

最佳答案

服务器端的渲染滑块

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)

10-05 19:19