Shiny 在列表中隐藏在标记列表中创建的小部件

Shiny 在列表中隐藏在标记列表中创建的小部件,shiny,Shiny,我最近正在构建一个闪闪发光的应用程序,在我的应用程序的某个地方,我希望用户可以从一行selectInput()小部件中指定任意数量的输入 由于selectInput()小部件的数量可能很大,因此我希望下一个selectInput()小部件仅在用户填充上一个小部件时显示 我的想法是,我将: 在标记列表中创建所有可能的selectInput()小部件 默认情况下将它们全部隐藏,然后 填写上一个时显示下一个 我对第一步和第三步很满意,但当我尝试使用shinyjs函数hide隐藏它们时,它似乎不适用于在

我最近正在构建一个闪闪发光的应用程序,在我的应用程序的某个地方,我希望用户可以从一行
selectInput()
小部件中指定任意数量的输入

由于
selectInput()
小部件的数量可能很大,因此我希望下一个
selectInput()
小部件仅在用户填充上一个小部件时显示

我的想法是,我将:

  • 在标记列表中创建所有可能的
    selectInput()
    小部件
  • 默认情况下将它们全部隐藏,然后
  • 填写上一个时显示下一个 我对第一步和第三步很满意,但当我尝试使用
    shinyjs
    函数
    hide
    隐藏它们时,它似乎不适用于在
    标记列表中创建的输入对象,它只适用于使用特定名称创建的小部件,请参见下面的示例:

    library(shiny)
    library(shinyjs)
    
    ui <- fluidPage(
    
    # Application title
    titlePanel("Hello Shiny!"),
    
    sidebarLayout(
    
        # Sidebar with a slider input
        sidebarPanel(
            sliderInput("obs",
                        "Number of observations:",
                        min = 0,
                        max = 1000,
                        value = 500)
        ),
    
        # Show a plot of the generated distribution
        mainPanel(
            useShinyjs(),
        uiOutput('comparisons')
        )
    )
    
    
    
    server <- shinyServer(function(input, output, session) {
    
        observe(1, shinyjs::hide('compare_1') )
        output$comparisons=renderUI({
            out=tagList()
            out=lapply(1:6,  function(x){ 
                selectizeInput(paste0('compare_',x),
                           label = 'Condition 1',
                           c('aa','bb', 'cc'))
            })
            out 
        })
    
    })
    
    shinyApp(ui, server)
    
    库(闪亮)
    图书馆(shinyjs)
    
    uiHi您可以使用
    conditinalPanel
    非常简单地实现这一点

    ui <- fluidPage(
    
      # Application title
      titlePanel("Hello Shiny!"),
    
      sidebarLayout(
    
        # Sidebar with a slider input
        sidebarPanel(
          sliderInput("obs",
                      "Number of observations:",
                      min = 0,
                      max = 1000,
                      value = 500)
        ),
    
        # Show a plot of the generated distribution
        mainPanel(
          useShinyjs(),
          uiOutput('comparisons')
        )
      )
    )
    
    
    server <- shinyServer(function(input, output, session) {
    
      output$comparisons=renderUI({
        out=tagList(
          selectizeInput(paste0('compare_1'),
                         label = 'Condition 1',
                         c("",'aa','bb', 'cc')),
          lapply(2:6,  function(x){ 
            conditionalPanel(
              paste0("input.compare_",x-1," != ''"),
              selectizeInput(paste0('compare_',x),
                             label = paste0('Condition ',x),
                             c("",'aa','bb', 'cc'))
            )
          })
        )
        out 
      })
    
    
    
    })
    
    shinyApp(ui, server)
    

    ui这是一个很好的解决方案!