有没有办法在闪亮的应用中使用checkboxGroupInput
来渲染多个uiOutputs:
server <- function(input, output) {
output$control1 <- renderUI({
req(input$devs)
if(input$devs %in% c("A")){
selectInput("a", "control A", choices = c("a", "b"))
}
})
output$control2 <- renderUI({
req(input$devs)
print(input$devs)
if(input$devs %in% c("B")){
selectInput("b", "controlB", choices = c("c", "d"))
}
})
}
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
checkboxGroupInput("devs", "Select controls", choices = c("A", "B")),
uiOutput("control1"),
uiOutput("control2")
),
mainPanel()
)
)
shinyApp(ui = ui, server = server)
我已经阅读了一些线程,解释了如何在同一个uiOutput中呈现multiple widgets但是要清楚我希望使用一个输入呈现多个uiOutput
。我知道我可以将输入分成多个checkboxInputs
,但我不想这样做。原因是我将checkboxGroupInput
选项作为参数传递给markdown report,并希望将选择保留为一个ID(真正的应用程序有很多输入)。
答案 0 :(得分:1)
我认为你只需要对if语句进行一些小改动。
input$devs %in% "B"
将返回FALSE TRUE
,这将触发if语句中的代码。
您只需将其更改为:
"B" %in% input$devs
。
以下完整代码:
server <- function(input, output) {
output$control1 <- renderUI({
req(input$devs)
if("A" %in% input$devs){
selectInput("a", "control A", choices = c("a", "b"))
}
})
output$control2 <- renderUI({
req(input$devs)
if("B" %in% input$devs){
selectInput("b", "controlB", choices = c("c", "d"))
}
})
}
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
checkboxGroupInput("devs", "Select controls", choices = c("A", "B")),
uiOutput("control1"),
uiOutput("control2")
),
mainPanel()
)
)
shinyApp(ui = ui, server = server)
请注意,您还可以将renderUI聚合为sthg,如:
choices - list()
choices[["A"]] <- c("a", "b")
choices[["B"]] <- c("c", "d")
observe({
lapply(input$devs, function(letter){
output[[paste0("control", letter) <- renderUI({
if(letter %in% input$devs){
selectInput(letter, paste0("control", letter), choices = choices[[letter]])
}
})
}
})