在闪亮的应用程序中使用 renderDT() 时,删除 DT::datatable 的标头会导致“找不到匹配的记录”

问题描述 投票:0回答:2

尝试从 DT::datatable 中删除标头会在

'No matching records found'
中使用时导致
renderDT()
。为什么会这样?我该如何解决?

library(shiny)
library(shinydashboard)
library(DT)
ui <- dashboardPage(
    dashboardHeader(title = "Dynamic sidebar"),
    dashboardSidebar(
    ),
    dashboardBody(
        DT::dataTableOutput("t")
    )
)

server <- function(input, output) {
    output$t<-renderDT(datatable(head(iris),colnames = ""))
}

shinyApp(ui, server)
r shiny dt
2个回答
1
投票

这个问题的简单解决方案是将

server
中的
renderDT()
参数设置为
FALSE
。然而,这个论点的描述说:

如果为 FALSE,则将整个数据帧立即发送到浏览器。强烈推荐用于中型到大型数据帧,这可能会导致浏览器变慢或崩溃。

如果这对你来说不是问题,试试这个:

library(DT)
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
  dashboardHeader(title = "Dynamic sidebar"),
  dashboardSidebar(
  ),
  dashboardBody(
    DT::dataTableOutput("t")
  )
)
debugonce(renderDT)
server <- function(input, output) {
  output$t <- renderDT(datatable(head(iris),colnames = ""), server = FALSE)
}

shinyApp(ui, server)

1
投票

去掉

colnames
参数,或者给一个列名的特征向量


TL;博士

我在模块调用中遇到了同样的问题。我花了一段时间才弄明白。

根本原因是

colnames
里面的
datatable
参数(或者相当于
...
里面的
renderDT
参数)。仅使用它来重命名 UI 标题的列名称。


以您的代码为例,但有一个有用的参数:

library(shiny)
library(semantic.dashboard)
library(DT)

ui <- dashboardPage(
    dashboardHeader(title = "Dynamic sidebar"),
    dashboardSidebar(
    ),
    dashboardBody(
        DT::dataTableOutput("t")
    )
)

server <- function(input, output) {
    output$t <- renderDT(
        datatable(
            head(iris),
            colnames = c(
                "Sepal length (mm)",
                "Sepal width (mm)",
                "Petal length (mm)",
                "Petal width (mm)",
                "Specie name"
            )
        )
    )
}

shinyApp(ui, server)

对于这种情况恕我直言,无需设置

server = FALSE

© www.soinside.com 2019 - 2024. All rights reserved.