Dynami c повторяет условную панель в R блестящей приборной панели - PullRequest
2 голосов
/ 07 февраля 2020

Я пытаюсь создать динамическую c условную панель. Итак, мои условия следующие:

Ввод в пользовательском интерфейсе:

selectInput('inpt','Input Number', seq(1,50,1), selectize = FALSE)

Мой ввод пользовательского интерфейса условной панели:

conditionalPanel(
  "input.inpt == 2",
  box(
   selectInput("id1", "Select number",
               seq(1, 24, 1), selected = 1),
   selectInput("id2", "Select number",
               seq(1, 24, 1), selected = 1),
   width = 2,
   status = "primary"
  )
 ),

conditionalPanel(
  "input.inpt == 3",
  box(
    selectInput("id1", "Select number",
                seq(1, 24, 1), selected = 1),
    selectInput("id2", "Select number",
                seq(1, 24, 1), selected = 1),
    selectInput("id3", "Select number",
                seq(1, 24, 1), selected = 1),
    width = 2,
    status = "primary"
  )

Так что этот код работает отлично! Но проблема в том, что он жестко запрограммирован.

Как вы можете проверить selectInput , у меня всего 50 входов.

У меня точно такое же количество новых панелей selectInput в зависимости от входа.

Пример: если выбрано 3, у меня будет 3 selectInput с id1, id2, id3 (как показано в коде выше). Если выбрано 18, у меня будет 18 selectInput с id1, id2, ..., id18. Если выбрано «n», у меня будет «n» selectInput с id1, id2, ... idn.

Я не хочу писать этот код так много раз.

PS : Все изменения вносятся только в поле (). Я не хочу создавать несколько ящиков.

Так как же это обобщить? Если у меня есть 'n' количество входов, как повторить этот подход?

1 Ответ

2 голосов
/ 07 февраля 2020

Вы можете использовать renderUI вместо conditionalPanel:

output$selectors <- renderUI({
  n <- input$inpt
  selectors <- lapply(1:n, function(i){
    selectInput(paste0("id",i), "Select number", seq(1,24), selected = 1)
  })
  do.call(function(...){
    box(..., width = 2, status = "primary")
  }, selectors)
})

и uiOutput("selectors") в вашем Shiny UI.


Маленький пример:

library(shiny)
library(shinydashboard)

ui <- fluidPage(
  br(),
  selectInput("inpt", "Input Number", seq(1,50), selectize = FALSE),
  br(),
  uiOutput("selectors")
)

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

  output[["selectors"]] <- renderUI({
    n <- input[["inpt"]]
    selectors <- lapply(1:n, function(i){
      selectInput(paste0("id",i), "Select number", seq(1,24), selected = 1)
    })
    do.call(function(...){
      box(..., width = 2, status = "primary")
    }, selectors)
  })

}

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