r语言 - 从服务器端调用到数据表,对 DT 应用客户端筛选器



我想用预设过滤器渲染一个数据表,以便用户可以更改过滤器。而且我想避免使用额外的 UI,例如选择输入等。

最小工作示例:在下面的示例中,我希望在"物种"列上有一个预设过滤器,例如"弗吉尼亚"。

library(shiny)
library(DT)
ui <- fluidPage(
    titlePanel("Edgar Anderson's Iris Data"),
    DT::dataTableOutput('dt')
)
# Define server logic required to draw a histogram
server <- function(input, output) {
    output$dt <- renderDataTable({
        datatable(
            iris,
            filter='top',
            options=list(dom='lritp')
        )
    })
}
shinyApp(ui = ui, server = server)

我在想使用columnDefs可能是可能的,但唉,我无法弄清楚它应该如何。

以下内容应该可以帮助您入门:

library(shiny)
library(DT)
ui <- fluidPage(
  titlePanel("Edgar Anderson's Iris Data"),
  DT::dataTableOutput('dt')
)
# Define server logic required to draw a histogram
server <- function(input, output) {
  output$dt <- renderDataTable({
    datatable(
      iris,
      filter='top',
      options=list(dom='lritp',
                   searchCols = list(NULL, NULL, NULL, NULL, NULL, list(search = '["virginica"]')))
    )
  })
}
shinyApp(ui = ui, server = server)

我发现的另一种解决方案,不像@ismirsehregal那么优雅,是使用代理。这需要为每个表定义一个额外的对象,并将它们添加到反应流或观察器中。

library(shiny)
library(DT)
ui <- fluidPage(
  titlePanel("Edgar Anderson's Iris Data"),
  DT::dataTableOutput('dt')
)
# Define server logic required to draw a histogram
server <- function(input, output) {
  dtproxy <- dataTableProxy('dt')
  output$dt <- renderDataTable({
    datatable(
      iris,
      filter='top',
      options=list(dom='lritp')
    )
  })
  observe({
    updateSearch(dtproxy, keywords=list(global=NULL, columns=c(rep('',5), '["virginica"]')))
  })
}
shinyApp(ui = ui, server = server)

最新更新