如何使Shiny的selectInput默认值为NULL,仅在选择非空值时过滤数据
问题根源
你的代码中req(input$vaccine_center_state_select)是导致空白输出的核心原因:req()函数会校验输入是否为“真值”,当selectInput处于默认空值状态时,输入值为空字符串,会被req()判定为不满足条件,直接中断reactive表达式的执行,无法走到else分支返回全量数据。
另外要注意,你在ui的choices里加了空字符串""作为第一个选项,此时input$vaccine_center_state_select的默认值是空字符串,不是NULL,原代码的is.null()判断也不会生效。
修正方案
1. 服务端代码修正
直接删除req校验,调整判断条件匹配空字符串即可:
filtered_vaccine_centers <- reactive({ if(input$vaccine_center_state_select != ""){ vacc_centers %>% filter(state == input$vaccine_center_state_select) } else { vacc_centers } }) %>% bindCache(input$vaccine_center_state_select)
2. 可选:UI端优化(实现真正的无默认选中)
如果不需要显式的空选项,可调整selectInput配置实现默认无选中,此时输入值为NULL:
selectInput(inputId = "vaccine_center_state_select", label = "Select State to narrow your search", choices = unique(vacc_centers$state), selected = character(0), multiple = FALSE )
对应的服务端判断条件调整为:
if(!is.null(input$vaccine_center_state_select))
内容的提问来源于stack exchange,提问作者ViSa
相关产品推荐
相关产品推荐

