r - 如何在Shiny中动态生成的条件面板中格式化条件?

标签 r loops shiny conditional-statements panel

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

  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")
  ))

最佳答案

你的第一个条件应该是:

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)

关于r - 如何在Shiny中动态生成的条件面板中格式化条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48343968/

相关文章:

php - 循环遍历 MYSQL 表并对行和上一行字段执行操作 PHP

javascript - 将增量计数器连接到 json 响应循环内的数组选择器的末尾

r - 使用 NMDS 图更改 R 中的轴

r - 如何将州和县线添加到 R 中的 geom_raster ggplot?

r - 用户在函数中输入文件名 - R

java - 同时移动两个具有不同且不断变化的文本的图形

r - 用于多个输入的 Shiny updateSelectInput

r - Shiny 的 splitLayout 不包装 HTML 文本

r - 用于显示表格的 Shiny 模块

r - 如何在 R 中按一个变量对数据帧进行排序,同时对其他变量进行分组