在R Shiny中组合DT::datatable、DT::dataTableProxy和“搜索窗格”扩展

dly7yett  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(152)

DT::dataTableProxy似乎无法与SearchPanes扩展一起使用,原因如下:

  • 搜索窗格需要Select扩展名。
  • Select扩展需要DT::renderDT(server = FALSE)选项。
  • DT::dataTableProxy在客户端不工作,并抛出DT错误。
library(shiny)
library(shinydashboard)
library(tidyverse)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    shiny::selectInput("rows", label = "Rows", choices = 1:nrow(mtcars)),
    shiny::actionButton("new", label = "New Data")
  ),
  dashboardBody(DT::dataTableOutput("cars"))
)

server <- function(input, output) { 
  rows <- reactive({ input$rows })
  output$cars <- DT::renderDataTable(server = FALSE, {
    expr = DT::datatable(
      data = mtcars |> head(rows()) 
      #,
      #extensions = c("SearchPanes", "Select", "Buttons"),
      #options = list(
      #  dom = "Btip",
      #  buttons = list("searchPanes")
      #)
    )

  })
  
  dtProxy <- DT::dataTableProxy("cars")
  
  observeEvent(input$new, label = "Observe button proxy update", {
    doubledata <- bind_rows(mtcars, mtcars)
    DT::replaceData(proxy = dtProxy, 
                    data = doubledata,
                    resetPaging = FALSE)
  })
}

shinyApp(ui, server)

使用server = FALSE尝试此代码,单击New Data,您将收到DT警告:DataTables warning: table id=DataTables_Table_0 - Invalid JSON response. For more information about this error, please see http://datatables.net/tn/1
删除server = FALSE和代理运行。
删除注解部分,搜索窗格出现,但没有实际的过滤器表示,并说明如果我们really want to use select extension then set select = 'none'的消息。
以下是一些参考资料:RStudio DT ExtensionsMatt Herman Tutorial

fwzugrvs

fwzugrvs1#

我最后做的是只使用DT::datatableProxy特性,然后在搜索窗格中使用自定义按钮。自定义按钮在How to add custom button in R Shiny datatable中找到。这需要创建一个新的被第一个无效的reactive,并检查输入是否有任何新的值。然后代理接收过滤后的数据。
也许有一天他们会增加对搜索窗格的支持。
Add server-side support for SearchPanes extension #877

相关问题