【问题标题】:How to format the condition in a dynamically generated conditionalPanel in Shiny?如何在 Shiny 的动态生成的 conditionalPanel 中格式化条件?
【发布时间】:2018-06-28 20:44:05
【问题描述】:

我正在尝试使用 for 循环在 Shiny 中创建小部件。每个块包含:

  1. 标签
  2. 复选框
  3. 选择选择器
  4. 两个数字输入

我想根据复选框的值和选项选择器的值来显示或隐藏两个数字输入的条件。 在我创建的 for 循环中,我为每个小部件变量添加了一个索引。 我想知道如何在 for 循环中执行条件面板的条件,知道变量在它们的名称中被索引。感谢您的帮助。我与您分享 server.R 和 UI.R 脚本:

 library(shiny)
shinyServer(function(input, output) {

  output$input_value2 <- renderUI({
    fluidRow(

      lapply(1:8, function(i) {

        column(width = 4,
               output[[paste0('b', i)]] <- renderUI({strong(paste0('Variable N ', i))}),
               checkboxInput(label = 'Inclued',paste0('c', i)),
               selectInput(paste0('popDist', i), "Distribution",list("Normal" = "normal","Uniforme" = "uniforme")),

               conditionalPanel(
                 condition = "eval(parse(text=paste0('input.popDist',i)))== 'uniforme'& (eval(parse(text=paste0('input.c',i)))==1",
                 numericInput(paste0('min', i), label = "Min:", value = 1),
                 numericInput(paste0('max', i), label = "Max:", value = 2)
               ),

               conditionalPanel(
                 condition = "eval(parse(text=paste0('input.popDist',i)))== 'uniforme'& (eval(parse(text=paste0('input.c',i)))==1",

                 numericInput(paste0('mean', i), label ="mean:", value = 0),
                 numericInput(paste0('sd', i), label = "st. dev.:", value = 1)

               )
        )
      })
    )
  })
})

    library(shiny)
shinyUI(fluidPage(
  titlePanel("TEST conditional panel"), 
  uiOutput("input_value2")
  ))

【问题讨论】:

    标签: r loops shiny conditional panel


    【解决方案1】:

    您的第一个条件应该是:

    paste0("input.popDist",i,"== 'uniforme'& input.c",i,"==1")
    

    第二个:

    paste0("input.popDist",i," == 'normal'& input.c",i,"==1")
    

    他们变成了i=1:

    "input.popDist1== 'uniforme'& input.c1==1"
    

    "input.popDist1 == 'normal'& input.c1==1"
    

    分别。

    工作示例:

    library(shiny)
    library(shinyjs)
    server <- shinyServer(function(input, output) {
    
      output$input_value2 <- renderUI({
        fluidRow(
    
          lapply(1:8, function(i) {
    
            column(width = 4,
                   output[[paste0('b', i)]] <- renderUI({strong(paste0('Variable N ', i))}), 
                   checkboxInput(label = 'Inclued',paste0('c', i)),
                   selectInput(paste0('popDist', i), "Distribution",list("Normal" = "normal","Uniforme" = "uniforme")),
    
                   conditionalPanel(
                     condition = paste0("input.popDist",i,"== 'uniforme'& input.c",i,"==1"),
                     numericInput(paste0('min', i), label = "Min:", value = 1),
                     numericInput(paste0('max', i), label = "Max:", value = 2)
                   ),
    
                   conditionalPanel(
                     condition = paste0("input.popDist",i," == 'normal'& input.c",i,"==1 "),
    
                     numericInput(paste0('mean', i), label ="mean:", value = 0),
                     numericInput(paste0('sd', i), label = "st. dev.:", value = 1)
    
                   )   
            )
          })
        )
      })
    
    })
    
    library(shiny)
    ui <- shinyUI(fluidPage(
      useShinyjs(),
      titlePanel("TEST conditional panel"), 
      uiOutput("input_value2")
    ))
    
    shinyApp(ui,server)
    

    【讨论】:

      猜你喜欢
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多