Shiny表格生成逻辑调整及数据不展示、预生成问题咨询
问题修复方案
根因说明
- 表格无数据:
Test的date2字段为字符串类型,和dateRangeInput返回的日期类型匹配失败,筛选返回空结果。 - 启动时提前生成表格:
renderUI生成daterange1是异步流程,控件未就绪时renderDataTable会默认展示空表,看起来不符合预期。
修复代码
library(shiny) library(shinythemes) Test <- structure(list(date2 = as.Date(c("2021-06-30","2021-06-30","2021-11-01","2021-11-02")), Category = c("FDE", "ABC", "FDE", "ABC"), coef = c(4, 1, 6, 1)), class = "data.frame",row.names = c(NA, -4L)) ui <- fluidPage( shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE, br(), tabPanel("", sidebarLayout( sidebarPanel( uiOutput('daterange'), br() ), mainPanel( dataTableOutput('table') ) )) )) server <- function(input, output,session) { data <- reactive(Test) output$daterange <- renderUI({ dateRangeInput("daterange1", "Period you want to see:", min = min(data()$date2), max = max(data()$date2), start = min(data()$date2), end = max(data()$date2)) }) data_subset <- reactive({ req(input$daterange1) req(input$daterange1[1] <= input$daterange1[2]) days <- seq(input$daterange1[1], input$daterange1[2], by = 'day') subset(data(), date2 %in% days) }) output$table <- renderDataTable({ req(data_subset()) data_subset() }) } shinyApp(ui = ui, server = server)
关键修改点
- 把
Test的date2字段转换为Date类型,保证类型匹配 - 给
dateRangeInput补充start和end参数,初始化时默认选中全量数据范围 - 在
renderDataTable中补充req(data_subset())校验,确保仅当筛选有结果时才渲染表格,避免启动时展示空表
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

