Reputation: 1
I have a pickerInput with three variables and I want when I select a variable I can set the mean and sd for each variable.
Then I am using these values to compute their distributions.
The problem is that this code sets mean and sd only to the first variable that I select.
Thank you in advance!
Here is a part of my code:
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)
Upvotes: 0
Views: 618
Reputation: 3671
Here is another solution with (input.priors.indexOf('g') > -1) & input.checkbox == '1'
as condition. In addition putting the pickerInput
into a conditionalPanel
the numericInputs
won't show when starting the app.
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)
EDIT: Answer to @YBS question - If pickerInput needs to be on the server side for processing user supplied dataset, can you make the numericInputs not show up when starting the app?
I copied the conditionalPanel including the pickerInput into the server. Seems still to hide the 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)
Upvotes: 2