0

我有一个带有三个变量的pickerInput,当我选择一个变量时,我可以为每个变量设置平均值和标准差。

然后我使用这些值来计算它们的分布。

问题是此代码仅将 mean 和 sd 设置为我选择的第一个变量。

先感谢您!

这是我的代码的一部分:

library(shiny)
library(shinyWidgets)
ui <-
  fluidPage(
    #3variables are g, m, c
    checkboxInput("checkbox", label = "Use priors"),
    uiOutput("conditionalInput"),
    conditionalPanel(
      condition = "input.priors == 'g'",
      numericInput("mg", "Mean:", NULL, min = 0, max = 1000000),
      numericInput("sdg", "Sd:", NULL , min = 0, max = 1000000)
    ),
    
    
    conditionalPanel(
      condition = "input.priors == 'm'",
      numericInput("mm", "Mean:", NULL, min = 0, max =
                     1000000),
      numericInput("sdm", "Sd:", NULL, min = 0, max = 1000000)
    ),
    
    conditionalPanel(
      condition = "input.priors == 'c'",
      numericInput("mc", "Mean:", NULL, min = 0, max = 1000000),
      numericInput("sdc", "Sd:", NULL, min = 0, max = 1000000)
    )
    
  )

server <- function(input, output, session) {
  output$conditionalInput <- renderUI({
    if (input$checkbox == TRUE) {
      pickerInput("priors",
                  "Select priors",
                  c(
                    "r" = "g",
                    "m" = "m",
                    "K" = "c"
                  ),
                  multiple = T)
    }
  })
  
}
shinyApp(ui = ui, server = server)
4

1 回答 1

1

这是另一种带有(input.priors.indexOf('g') > -1) & input.checkbox == '1' as 条件的解决方案。此外,在启动应用程序时pickerInput将不会显示。conditionalPanelnumericInputs

library(shiny)
library(shinyWidgets)
ui <-
  fluidPage(
    #3variables are g, m, c
    checkboxInput("checkbox", label = "Use priors"),
    
    conditionalPanel(
      condition = "input.checkbox == '1'",
      pickerInput("priors", "Select priors", c("r" = "g", "m" = "m", "K" = "c"),
                  multiple = T) 
    ), 
    
    conditionalPanel(
      condition = "(input.priors.indexOf('g') > -1) & input.checkbox == '1'",
      numericInput("mg", "Mean-r:", NULL, min = 0, max = 1000000),
      numericInput("sdg", "Sd:-r", NULL , min = 0, max = 1000000)
    ),
    
    conditionalPanel(
      condition = "(input.priors.indexOf('m') > -1) & input.checkbox == 1",
      numericInput("mm", "Mean-m:", NULL, min = 0, max =
                     1000000),
      numericInput("sdm", "Sd-m:", NULL, min = 0, max = 1000000)
    ),
    
    conditionalPanel(
      condition = "(input.priors.indexOf('c') > -1) & input.checkbox == '1'",
      numericInput("mc", "Mean-K:", NULL, min = 0, max = 1000000),
      numericInput("sdc", "Sd-K:", NULL, min = 0, max = 1000000)
    )
  )

server <- function(input, output, session) {
    
  
}
shinyApp(ui = ui, server = server)

编辑:回答@YBS 问题-如果pickerInput 需要在服务器端来处理用户提供的数据集,你可以让numericInputs 在启动应用程序时不显示吗?

我将包含 pickerInput 的 conditionalPanel 复制到服务器中。似乎仍然隐藏 numericInputs。

library(shiny)
library(shinyWidgets)
ui <-
  fluidPage(
    #3variables are g, m, c
    checkboxInput("checkbox", label = "Use priors"),
    
    uiOutput("conditionalInput"),
    
    conditionalPanel(
      condition = "(input.priors.indexOf('g') > -1 & input.checkbox == 1) ",
      numericInput("mg", "Mean-r:", NULL, min = 0, max = 1000000),
      numericInput("sdg", "Sd:-r", NULL , min = 0, max = 1000000)
    ),
    
    conditionalPanel(
      condition = "(input.priors.indexOf('m') > -1 & input.checkbox == 1) ",
      numericInput("mm", "Mean-m:", NULL, min = 0, max =
                     1000000),
      numericInput("sdm", "Sd-m:", NULL, min = 0, max = 1000000)
    ),
    
    conditionalPanel(
      condition = "(input.priors.indexOf('c') > -1 & input.checkbox == 1) ",
      numericInput("mc", "Mean-K:", NULL, min = 0, max = 1000000),
      numericInput("sdc", "Sd-K:", NULL, min = 0, max = 1000000)
    )
  )

server <- function(input, output, session) {
  

  output$conditionalInput <- renderUI({
    
    conditionalPanel(
      condition = "input.checkbox == '1'",
      pickerInput("priors", "Select priors", c("r" = "g", "m" = "m", "K" = "c"),
                  multiple = T))
    
  })
  
  
}
shinyApp(ui = ui, server = server)
于 2020-09-21T11:23:57.627 回答