【问题标题】:Dynamic repeating conditionalPanel in R shiny dashboardR闪亮仪表板中的动态重复条件面板
【发布时间】:2020-05-23 19:20:38
【问题描述】:

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

用户界面中的输入:

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 个带有 id1、id2、...、id18 的 selectInput。 如果选择了“n”,我将有 id1、id2、... idn 的“n”selectInput。

我不想写这么多次代码。

P.S.:所有更改都在 box() 中进行。我不想创建多个框。

那么如何概括这个呢?如果我有“n”个输入,如何重复这种方法?

【问题讨论】:

    标签: r shiny dynamic-programming shinydashboard


    【解决方案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)
    })
    

    uiOutput("selectors") 在您的闪亮 UI 中。


    小例子:

    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)
    

    【讨论】:

    • 你能举个小例子吗?我不明白应该是什么功能以及如何调用。我试图在函数中添加 conditionalPanel 但有一些闪亮的错误。我想我做错了什么。
    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 2016-12-20
    • 2015-04-22
    • 2019-07-26
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多