Как добавить условный 'selectInput' на основе выбранного checkboxInput в блестящем? - PullRequest
0 голосов
/ 08 ноября 2018

Мне бы хотелось, чтобы, если выбраны параметры checkboxInput Factorial, это помогло бы приложению отобразить новый selectInput с несколькими опциями. Вот минимальный рабочий пример.

library(shiny)
ui <- fluidPage(

   titlePanel("Old Faithful Geyser Data"),
   sidebarLayout(
      sidebarPanel(
         sliderInput("bins",
                     "Number of bins:",
                     min = 1,
                     max = 50,
                     value = 30),
         checkboxInput("fixed", "Factorial parameters"),
         conditionalPanel(condition = "fixed == 'TRUE'",
                      selectInput("choice",
                                  "Choose your fixed parameter", 
                                  c("alpha"= "Alpha", "beta"="Beta"),
                                  selected = "alpha"))
                      )
  ,
     mainPanel(
         plotOutput("distPlot")
      )
   )
)


  server <- function(input, output) {

   output$distPlot <- renderPlot({

      x    <- faithful[, 2] 
      bins <- seq(min(x), max(x), length.out = input$bins + 1)
      hist(x, breaks = bins, col = 'darkgray', border = 'white')
   })
}


shinyApp(ui = ui, server = server)

Может кто-нибудь сказать мне, что я делаю не так?

Большое спасибо!

1 Ответ

0 голосов
/ 08 ноября 2018

Обновление

Я понял это! изменить следующим образом:

conditionalPanel(condition = "input.fixed == 1",

Предыдущие ответы

Как правило, вам нужно было бы использовать input.fixed в условной панели, хотя, по-видимому, по какой-то причине это не работает для checkboxInput (может, кто-то другой может объяснить, почему?). Есть несколько альтернатив. Я бы предложил пакет inyjs .

library(shiny)
library(shinyjs)
ui <- fluidPage(
  useShinyjs(),
  titlePanel("Old Faithful Geyser Data"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 30),
      checkboxInput("fixed", "Factorial parameters"),
      hidden(selectInput("choice",
                         "Choose your fixed parameter", 
                         c("alpha"= "Alpha", "beta"="Beta"),
                         selected = "alpha"))
    )
    ,
    mainPanel(
      plotOutput("distPlot")
    )
  )
)


server <- function(input, output) {

  output$distPlot <- renderPlot({

    x    <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins + 1)
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
    observeEvent(input$fixed, {
      toggle("choice")
    }, ignoreInit = TRUE)
  })
}


shinyApp(ui = ui, server = server)

Вместо переключения вы могли бы быть более явным с помощью оператора if ... else с использованием shinysj::show() и shinyjs::hide(), хотя я думаю, что это аккуратнее (просто обратите внимание на ignoreInit = TRUE).

Как упоминалось выше, использование checkboxGroupInput, например, похоже, работает с conditionalPanels:

checkboxGroupInput("fixed", label = "", choices = "Factorial parameters"),
    conditionalPanel(condition = "input.fixed == 'Factorial parameters'",
                     selectInput("choice",
                                 "Choose your fixed parameter", 
                                 c("alpha"= "Alpha", "beta"="Beta"),
                                 selected = "alpha"))

немного хакер, но делает свою работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...