Shiny应用renderUI函数内selectInput更新异常:下拉选项仅显示单个值
问题原因与解决方法
嘿,我发现你代码里的问题啦!问题出在你用了ifelse()函数而不是常规的if-else控制语句上。
ifelse()是向量化函数,它的返回值长度会和输入的条件长度保持一致。你的条件input$s1 == "1"是一个长度为1的逻辑值(要么TRUE要么FALSE),所以ifelse()只会返回对应分支向量的第一个元素:
- 当
input$s1 == "1"为TRUE时,它只取c("x1","x2")的第一个元素"x1"; - 当条件为
FALSE时,它只取s向量的第一个元素(比如选"2"时取4,选"3"时取9)。
这就是为什么第二个下拉框始终只显示单个选项的原因。
修正后的代码
把renderUI里的choices部分换成常规的if-else控制流即可,因为if-else是针对单个条件返回完整的向量:
library(shiny) library(shinythemes) library(shinyBS) ui <- fluidPage( theme = shinytheme("flatly"), navbarPage("Demo", tabPanel("Home", column(2, selectInput(inputId = "s1",label = "select project",choices = c("1", "2", "3")), uiOutput("sensor") ))) server <- function(input, output,session){ output$sensor <- renderUI({ s = c(as.numeric((input$s1))^2,as.numeric((input$s1))^3) # 替换成if-else控制语句 choices_list <- if(input$s1 == "1") { c("x1","x2") } else { s } selectInput("t1",label ="Select",choices = choices_list,multiple = FALSE) }) } # 启动应用 shinyApp(ui, server)
这样修改后,当你选择第一个下拉框的不同选项时,第二个下拉框就能正常显示对应的两个选项啦:
- 选"1"时显示
x1、x2; - 选"2"时显示
4、8; - 选"3"时显示
9、27。
内容的提问来源于stack exchange,提问作者Haribo
相关产品推荐
相关产品推荐

