Shiny仪表盘使用下拉框切换报告时出现Unknown column错误
Shiny下拉切换数据集闪现Unknown column错误解决方案
问题根因
报错由Shiny响应式逻辑的执行顺序冲突导致:切换下拉选择框的报告选项时,响应式数据集df()会先完成更新,此时input$col_n仍然保留着上一个数据集的列名,表格渲染逻辑会先触发一次,用旧列名去筛选新数据集的列,就会抛出Unknown column错误;等到updateCheckboxGroupInput执行完成、更新input$col_n为当前数据集的列名后,表格会重新渲染恢复正常,因此报错只会闪现1秒。
修复方案
仅需在表格渲染逻辑中新增一列校验,确保选中的列全部属于当前数据集后再执行渲染即可,修改后的完整代码如下:
library(shiny) library(DT) library(leaflet) library(dplyr) ui <- fluidPage( selectInput( "FILE", "Select the Report:", choices = c("tbl1","tbl2","tbl3")), checkboxGroupInput( "col_n", "Columns to display:", choices = c() ), DT::dataTableOutput("table_data") ) server <- function(input, output,session) { df <- reactive ({ switch(input$FILE, "tbl1" = iris, "tbl2" = mtcars, "tbl3" = faithful ) }) observeEvent(input$FILE,{ req(df()) updateCheckboxGroupInput( session, "col_n", choices = colnames(df()), selected = colnames(df()) ) }) output$table_data <- DT::renderDataTable({ req(input$col_n) # 新增校验:仅当选中列全部属于当前数据集时才执行后续渲染 req(all(input$col_n %in% colnames(df()))) DT::datatable( df() %>% select_at(input$col_n), rownames = FALSE) }) } shinyApp(ui, server)
改动说明
本次修改仅在原有renderDataTable逻辑中新增了一行req(all(input$col_n %in% colnames(df()))),没有调整原有逻辑结构,改造成本极低,可以完全解决报错闪现的问题,不影响演示效果。
内容的提问来源于stack exchange,提问作者Pop
相关产品推荐
相关产品推荐

