У меня есть динамический элемент Shiny UI, где пользователю предлагается выбрать число (1-4) из выпадающего списка. Затем Shiny генерирует соответствующее количество элементов numericInput (), которые будут использоваться моей программой.
Следующий код работает, но он очень многословен, и я полагаю, что есть способы улучшить код, чтобы (1) сделать его более лаконичным и (2) избегать использования операторов if / else.
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("num", label = h3("Select box"),
choices = list("Choice 1" = 1, "Choice 2" = 2, "Choice 3" = 3,
"Choice 4" = 4),
selected = 1),
uiOutput("input_ui")
),
mainPanel(
tableOutput("table")
)
)
)
server <- function(input, output) {
output$input_ui <- renderUI({
num <- as.integer(input$num)
if (num == 1) {
fluidRow(
column(6, numericInput("min", h5("Min"), value = 10)))
} else if (num == 2) {
fluidRow(
column(6, numericInput("min", h5("Min"), value = 10)),
column(6, numericInput("max", h5("Max"), value = 15))
)
} else if (num == 3) {
fluidRow(
column(6, numericInput("min", h5("Min"), value = 10)),
column(6, numericInput("max", h5("Max"), value = 15)),
column(6, numericInput("max", h5("Max"), value = 20))
)
} else if (num == 4) {
fluidRow(
column(6, numericInput("min", h5("Min"), value = 10)),
column(6, numericInput("max", h5("Max"), value = 15)),
column(6, numericInput("max", h5("Max"), value = 20)),
column(6, numericInput("max", h5("Max"), value = 25))
)
}
})
}
shinyApp(ui = ui, server = server)
Есть ли лучший способ написать это?
Обратите внимание, что в приведенном выше примере значения и метки являются произвольными.