我正在尝试创建动态条件面板。所以我的条件如下:
UI输入:
selectInput('inpt','Input Number', seq(1,50,1), selectize = FALSE)
我的条件面板UI输入是:
conditionalPanel(
"input.inpt == 2",
box(
selectInput("id1", "Select number",
seq(1, 24, 1), selected = 1),
selectInput("id2", "Select number",
seq(1, 24, 1), selected = 1),
width = 2,
status = "primary"
)
),
conditionalPanel(
"input.inpt == 3",
box(
selectInput("id1", "Select number",
seq(1, 24, 1), selected = 1),
selectInput("id2", "Select number",
seq(1, 24, 1), selected = 1),
selectInput("id3", "Select number",
seq(1, 24, 1), selected = 1),
width = 2,
status = "primary"
)
所以此代码非常有效!但是问题是它是硬编码的。
您可以在selectInput中签入,我总共有50个输入。
根据输入,我有完全相同数量的新selectInput面板。
示例:如果选择3,则将有3个selectInput,分别为id1,id2,id3(如上面的代码所示)。如果选择18,我将有18个selectInput,分别为id1,id2,...,id18。如果选择了“ n”,则我将使用带有id1,id2,... idn的“ n” selectInput。
我不想多次编写此代码。
P.S .:所有更改都在box()中进行。我不想创建多个框。
那么如何对此进行概括?如果我有n个输入,如何重复这种方法?
renderUI
而不是conditionalPanel
:output$selectors <- renderUI({
n <- input$inpt
selectors <- lapply(1:n, function(i){
selectInput(paste0("id",i), "Select number", seq(1,24), selected = 1)
})
do.call(function(...){
box(..., width = 2, status = "primary")
}, selectors)
})
和您的Shiny UI中的uiOutput("selectors")
。
小例子:
library(shiny) library(shinydashboard) ui <- fluidPage( br(), selectInput("inpt", "Input Number", seq(1,50), selectize = FALSE), br(), uiOutput("selectors") ) server <- function(input, output, session){ output[["selectors"]] <- renderUI({ n <- input[["inpt"]] selectors <- lapply(1:n, function(i){ selectInput(paste0("id",i), "Select number", seq(1,24), selected = 1) }) do.call(function(...){ box(..., width = 2, status = "primary") }, selectors) }) } shinyApp(ui, server)