【发布时间】:2019-10-17 10:32:35
【问题描述】:
我有一个动态闪亮的 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)
有没有更好的写法?
请注意,在上面,值和标签是任意的。
【问题讨论】:
标签: r user-interface shiny reactive