使用 renderDataTable 和 Shiny 在 processWidget(instance) 中发出警告

Warning in processWidget(instance) using renderDataTable and Shiny

我每次 运行 我的 shiny 应用程序时都会收到此警告。

Warning in processWidget(instance) : renderDataTable ignores ... arguments when expr yields a datatable object; see ?renderDataTable

这是一个可重现的例子:

library(shiny)
library(DT)

ui <- fluidPage(
                titlePanel("My app"),
                sidebarLayout(
                  sidebarPanel(
                  ),
                  mainPanel(
                    dataTableOutput("table")
                    )
                )
)


server <- function(input, output, session) {

  output$table <- renderDataTable({

      datatable(
        mtcars,
        filter = list(position = 'top', clear = FALSE),
        selection = "none", #this is to avoid select rows if you click on the rows
        rownames = FALSE,
        extensions = 'Buttons',
        
        options = list(
          scrollX = TRUE,
          autoWidth = TRUE,
          dom = 'Blrtip',
          buttons =
            list('copy', 'print', list(
              extend = 'collection',
              buttons = list(
                list(extend = 'csv', filename = "file", title = NULL),
                list(extend = 'excel', filename = "file", title = NULL)),
              text = 'Download'
            )),
          lengthMenu = list(c(10, 30, 50, -1),
                            c('10', '30', '50', 'All'))
        ),
        class = "display"
      )
    
  },rownames=FALSE)
}
  
  
shinyApp(ui, server)

我检查了这个 但我最后没有使用参数 filter。我在 DT::datatable 中使用它。更重要的是,如果我评论这一行 (filter = list(position = 'top', clear = FALSE)),我仍然会收到相同的警告。所以一定是另有原因。

有人知道怎么解决吗?

提前致谢

rownames 不是 DT::renderDataTable() 的参数的一部分,因此它被传入此函数的 ... 中。但是 DT::renderDataTable() 的文档说:

... [is] ignored when expr returns a table widget, and passed as additional arguments to datatable() when expr returns a data object

在这里,您在 renderDataTable() 中创建了一个 datatable,因此 ...(因此 rownames = FALSE)将被忽略。这个参数在这里没有用,所以你可以删除 rownames = FALSE 并且它会删除警告。