使用checkboxGroupInput呈现多个UIOutput
有没有办法在一个闪亮的应用程序中使用使用checkboxGroupInput呈现多个UIOutput,r,shiny,R,Shiny,有没有办法在一个闪亮的应用程序中使用checkboxGroupInput来呈现多个UIOutput: server <- function(input, output) { output$control1 <- renderUI({ req(input$devs) if(input$devs %in% c("A")){ selectInput("a", "control A", choices = c("a", "b")) } })
checkboxGroupInput
来呈现多个UIOutput:
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)
server我想您只需要在if语句中做一点小改动。
在%“B”
中输入$devs%将返回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)
server您希望您的输出是什么?我希望输出是独立的。因此,如果选择输入A,则显示控制1,如果选择B,则显示控制2。如果选择了两者,则两者都显示。对不起,我回到笔记本电脑时会更新问题。
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]])
}
})
}
})