0

正如我在这个网站上多次抱怨的那样(shinyTree: set variable to value if checkbox is checked , shinyTree: view without selection),严重缺乏关于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在树中被选中时,我才有兴趣出现。

我知道在使用checkboxGroupInputs 时,我可以使用在闪亮的 conditionalPanel javascript 条件中找到的内容:javascript 中有 R %in% 运算符吗?. 这一切都很好而且很花哨,但是由于缺乏关于 的文档(以及该网站上没有提出的问题)shinyTree,我不确定如何解决这个问题。我知道我需要使用 a ,但我不知道如何在函数conditionalPanel的参数中引用树及其节点condition。更复杂的是,树本身不在其中input(因为input$在声明它时它没有),据我所知,我无法引用output$变量。

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

4

1 回答 1

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)

闪亮的变种

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)
于 2016-08-30T12:30:02.703 回答