DT SearchPanes 自定义过滤器

DT SearchPanes Custom Filter

我正在尝试做一些类似 here 的事情,但我无法弄清楚如何在 Shiny 中做这件事。例如,如果有一个过滤器 mtcars “高效”(至少 15 mpg 的汽车)或“低效”(小于 15 mpg 的汽车)。

这是一些代码:

library(shiny)
library(DT)

ui <- shinyUI(
  fluidPage(DT::dataTableOutput("mtcars_table"))
)

server <- shinyServer(function(input, output, session) {
  output$mtcars_table <- 
    DT::renderDT({
      DT::datatable(
        mtcars,
        options = list(dom = 'Pfrtip', 
                       columnDefs = list(
                         list(
                           searchPanes = list(show = TRUE), targets = 1
                         ),
                         list(
                           searchPanes = list(show = FALSE), targets = 2:11
                         ))),
        extensions = c('Select', 'SearchPanes'),
        selection = 'none'
      )
      
    }, server = FALSE)
})

shinyApp(ui = ui, server = server)

这里有一些基于 DataTables example 和自定义过滤选项的尝试。

对于额外的 list 选项,我包括了一个标签,如“高效”,以及 value 的 javascript 函数(rowData[1] 应该引用第一个列,mpg).

library(shiny)
library(DT)

ui <- shinyUI(
  fluidPage(DT::dataTableOutput("mtcars_table"))
)

server <- shinyServer(function(input, output, session) {
  output$mtcars_table <- 
    DT::renderDT({
      DT::datatable(
        mtcars,
        options = list(
          dom = 'Pfrtip', 
          columnDefs = list(
            list(
              searchPanes = list(
                show = TRUE,
                options = list(
                  list(
                    label = "Efficient",
                    value = JS(
                      "function(rowData, rowIdx) { return rowData[1] >= 15; }"
                    )
                  ),
                  list(
                    label = "Inefficient",
                    value = JS(
                      "function(rowData, rowIdx) { return rowData[1] < 15; }"
                    )
                  )
                )
              ),
              targets = 1
            ),
            list(
              searchPanes = list(show = FALSE), targets = 2:11
            )
          )
        ),
        extensions = c('Select', 'SearchPanes'),
        selection = 'none'
      )
    }, server = FALSE)
})

shinyApp(ui = ui, server = server)