为什么 tabsetPanel 显示在我的数据表上? R闪亮

Why is tabsetPanel displaying over my datatable? R Shiny

我已经在这里工作了几天,但运气不佳。 每当我从代码中注释掉 tabsetPanels 时,数据表 (DT) 就会自行显示。但是,当保留 tabsetPanels 时,数据表无处可寻。 为什么会这样,我该如何解决?

library(shiny)
library(DT)
library(data.table)

# Define UI ----
ui <- fluidPage(
  titlePanel("Alpha"),
  mainPanel(
    fluidRow(
      tabsetPanel(id = 'tpanel',
                  type = "tabs",
                  tabPanel("Alpha", plotOutput("plot")),
                  tabPanel("Beta", plotOutput("plot")),
                  tabPanel("Delta",  plotOutput("plot")),
                  tabPanel("Omega", plotOutput("plot")))
      ),
    br(),
    br(),
    fluidRow(
      splitLayout(
        dateInput("sdate", "Start Date"),
        dateInput("edate", "End Date"),
        textInput("gmin", "Minimum"),
        textInput("gmax", "Maximum")
      )
    ),
    br(),
    DT::dataTableOutput('tbl')
  )
)

# Define server logic ----
server <- function(input, output) {
  output$tbl <- renderDT({datatable(port, editable = 'cell', caption = 'test')})
}

# Run the app ----
shinyApp(ui = ui, server = server)

这是以下代码的输出,请注意缺少的数据表:

当我 remove/comment 退出 tabsetPanel 时,数据表正常显示。 我还应该补充一点,变量端口是从 csv 加载到内存中的,我把它放在那里是为了方便。我在启动此脚本之前手动加载它,我只是在学习掌握 shiny 的窍门时才手动加载它。最后,当我 运行 以下脚本时,它 运行 没有问题:

library(shiny)
library(DT)
library(data.table)

# Define UI ----
ui <- fluidPage(
  titlePanel("Alpha"),
  DT::dataTableOutput('tbl')
  )
)

# Define server logic ----
server <- function(input, output) {
  output$tbl <- renderDT({datatable(port, editable = 'cell', caption = 'test')})
}

# Run the app ----
shinyApp(ui = ui, server = server)

当我在上面的代码中添加tabsetPanels 时,数据表不显示。为什么会这样,我该如何解决?

Shiny 对 plotOutput("plot") 的输出有多次相同的 ID 感到困惑,因此无法呈现任何输出。

修复方法如下:

library(shiny)
library(DT)
library(data.table)

# Define UI ----
ui <- fluidPage(
  titlePanel("Alpha"),
  mainPanel(
    fluidRow(
      tabsetPanel(id = 'tpanel',
                  type = "tabs",
                  tabPanel("Alpha", plotOutput("plot1")),
                  tabPanel("Beta", plotOutput("plot2")),
                  tabPanel("Delta",  plotOutput("plot3")),
                  tabPanel("Omega", plotOutput("plot4")))
    ),
    br(),
    br(),
    fluidRow(
      splitLayout(
        dateInput("sdate", "Start Date"),
        dateInput("edate", "End Date"),
        textInput("gmin", "Minimum"),
        textInput("gmax", "Maximum")
      )
    ),
    br(),
    DT::dataTableOutput('tbl')
  )
)

# Define server logic ----
server <- function(input, output) {
  output$tbl <- renderDT({datatable(iris, editable = 'cell', caption = 'test')})
}

# Run the app ----
shinyApp(ui = ui, server = server)