R闪亮仪表板中的动态重复条件面板

问题描述 投票:1回答:1

我正在尝试创建动态条件面板。所以我的条件如下:

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个输入,如何重复这种方法?

r shiny dynamic-programming shinydashboard
1个回答
1
投票
您可以使用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)

© www.soinside.com 2019 - 2024. All rights reserved.