R语言Shiny应用中插入的tabPanel不显示如何调整?
问题原因
- UI结构语法错误:
tabsetPanel中Output1的tabPanel闭合括号位置错误,将后续的Output2、Output3两个tabPanel全部嵌套进了Output1的内容区,导致无法作为独立标签显示 - 重复UI赋值错误:
fluidPage内部重复对ui变量赋值,导致UI结构嵌套异常 - 列名引用错误:测试数据
df1仅包含date列,服务端output$date中多处引用不存在的date2列,触发运行时报错 - 未定义对象错误:服务端
observeEvent中引用未定义的my对象、output$mycode未实现,对应组件无法正常渲染
修正后可运行代码
library(shiny) library(shinythemes) library(dplyr) function.test<-function(){ df1 <- structure( list(date= c("2021-06-28","2021-06-28","2021-06-28"), Category = c("ABC","ABC","ABC"), Week= c("Wednesday","Wednesday","Wednesday"), DR1 = c(4,1,0), DR01 = c(4,1,0), DR02= c(4,2,0),DR03= c(9,5,0), DR04 = c(5,4,0),DR05 = c(5,4,0),DR06 = c(5,4,0),DR07 = c(5,4,0),DR08 = c(5,4,0)), class = "data.frame", row.names = c(NA, -3L)) return(df1) } ui <- fluidPage( shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE, br(), tabPanel("First Panel", fluidPage( fluidRow( br(), br(), column(4, "", wellPanel( uiOutput("date"), uiOutput("mycode") ), wellPanel( conditionalPanel( condition = "output.mycode", actionButton("reset", "Reset") ) ) ), column(8, "", tabsetPanel( tabPanel("Output1", plotOutput("graph",width = "100%", height = "600")), tabPanel("Output2",uiOutput('daterange')), tabPanel("Output3") ) ) ) ) ) ) ) server <- function(input, output,session) { data <- reactive(function.test()) # 补充mycode输出实现,可根据业务需求调整逻辑 output$mycode <- reactive({ !is.null(input$date2) }) outputOptions(output, 'mycode', suspendWhenHidden = FALSE) output$date <- renderUI({ req(data()) all_dates <- seq(as.Date('2021-01-01'), as.Date('2021-01-15'), by = "day") # 修正为引用存在的date列 disabled <- as.Date(setdiff(all_dates, as.Date(data()$date)), origin = "1970-01-01") dateInput(input = "date2", label = h4("Data"), min = min(data()$date), max = max(data()$date), value = NA, format = "dd-mm-yyyy", datesdisabled = disabled) }) output$daterange <- renderUI({ tagList(dateRangeInput("daterange1", "", start = min(data()$date), end = max(data()$date), min = min(data()$date), max = max(data()$date), format = "dd-mm-yyyy")) }) observeEvent(input$reset, { req(input$date2) df1 <- data() # 移除未定义的my对象引用 updateDateInput(session, 'date2', value = NA) updateSelectInput(session, 'code', h4("Category"),choices= unique(df1$Category), selected=character(0)) }) } shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

