我认为最简单的方法就是添加
options = list(stateSave = TRUE)
在renderDT() 函数中。然后,在server内,可以随时用input$<tableID>_state访问表的状态(我的表就叫“表”所以变成input$table_state:
observeEvent(input$table_state, {
str(input$table_state)
})
那么整个解决方案是:
library(shiny)
library(shinydashboard)
library(plotly)
library(DT)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
box(DTOutput("table"))
)
)
server <- function(input, output, session) {
fileData <- reactiveFileReader(1000, session, 'www/test.csv', read.csv)
output$table <- renderDT(fileData(), filter = "top",
options = list(stateSave = TRUE))
observeEvent(input$table_state, {
str(input$table_state)
})
}
shinyApp(ui, server)
RStudio 控制台中的示例输出:
List of 6
$ time : num 1.54e+12
$ start : int 0
$ length : int 10
$ order : list()
$ search :List of 4
..$ search : chr ""
..$ smart : logi TRUE
..$ regex : logi FALSE
..$ caseInsensitive: logi TRUE
$ columns:List of 5
..$ :List of 2
.. ..$ visible: logi TRUE
.. ..$ search :List of 4
.. .. ..$ search : chr ""
.. .. ..$ smart : logi TRUE
.. .. ..$ regex : logi FALSE
.. .. ..$ caseInsensitive: logi TRUE
..$ :List of 2
.. ..$ visible: logi TRUE
.. ..$ search :List of 4
.. .. ..$ search : chr "[\"0\"]"
.. .. ..$ smart : logi TRUE
.. .. ..$ regex : logi FALSE
.. .. ..$ caseInsensitive: logi TRUE
..$ :List of 2
.. ..$ visible: logi TRUE
.. ..$ search :List of 4
.. .. ..$ search : chr "[\"8\"]"
.. .. ..$ smart : logi TRUE
.. .. ..$ regex : logi FALSE
.. .. ..$ caseInsensitive: logi TRUE
..$ :List of 2
.. ..$ visible: logi TRUE
.. ..$ search :List of 4
.. .. ..$ search : chr ""
.. .. ..$ smart : logi TRUE
.. .. ..$ regex : logi FALSE
.. .. ..$ caseInsensitive: logi TRUE
..$ :List of 2
.. ..$ visible: logi TRUE
.. ..$ search :List of 4
.. .. ..$ search : chr ""
.. .. ..$ smart : logi TRUE
.. .. ..$ regex : logi FALSE
.. .. ..$ caseInsensitive: logi TRUE
注意search 列表,其中显示了应用于每列的过滤器。
奖金
对于超级简单的过滤器提取,请使用input$table_search_columns。这与使用 sapply 的结果相同:
sapply(input$table_state$columns, function(x) x$search$search)
这将给出类似
[1] "" "[\"0\"]" "[\"8\"]" "" ""
对于上面的例子。