我最近正在构建一个shiny
应用,在我的应用中的某个地方我希望用户可以从一行selectInput()
小部件中指定任意数量的输入。
由于selectInput()
窗口小部件的数量可能很大,我希望下一个selectInput()
窗口小部件仅在用户填充前一个窗口小部件时显示。
我的想法是,我会:
selectInput()
,tagList
小部件
我对第一步和第三步很好,但是当我尝试使用shinyjs
函数hide
隐藏它们时,它似乎不适用于{{1}中创建的输入对象它只适用于使用特定名称创建的那些小部件,请参阅下面的示例:
tagList
假设我创建了6个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)
小部件,将其selectInput
命名为compare_1
,我还创建了一个名为compare_6
的{{1}}来展示举个例子。在服务器中,如果我只说sliderInput
,obs
将被隐藏,但当我致电shinyjs::hide('obs')
时,sliderInput
仍然存在。任何想法将不胜感激!
答案 0 :(得分:1)
嗨,你可以用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)