You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:24:01