我想用预设过滤器渲染一个数据表,以便用户可以更改过滤器。而且我想避免使用额外的 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)