【问题标题】:stateSave not preserving filters in shiny datatablestateSave 不保留闪亮数据表中的过滤器
【发布时间】:2017-06-16 22:54:17
【问题描述】:

我在一个闪亮的应用程序中有一个数据表。设置stateSave = TRUE 会保留按升序或降序对列进行排序,但如果设置了过滤器参数(例如 cyl = 6:8),则不会保留。关于如何解决这个问题的任何想法?

示例代码如下:

require(shiny)
require(DT)

ui<-fluidPage(
  column(12,
         DT::dataTableOutput("mtcars_table")
  )
)

server<-function(input,output,session)
{

  output$mtcars_table <- DT::renderDataTable({datatable({mtcars},
    options = list(pageLength = 50, 
                   stateSave = TRUE
    ),
    selection = "single", filter = "top", escape = FALSE)}, 
    server = FALSE)
}

shinyApp(ui=ui, server=server)

【问题讨论】:

  • 自去年@User247365 以来对此有何更新?

标签: r shiny dt


【解决方案1】:

它仅适用于服务器端处理(设置server = TRUE)。 不幸的是,您可能拥有更大的数据集,这可能会导致性能问题。

原因很简单。保存的不是过滤器,而是过滤后的数据集。请注意,刷新后您仍然可以看到正确过滤的数据(使用服务器端处理),但过滤器本身不再显示。如果您单击过滤器字段并注意到显示的范围/选择与过滤数据集的属性不匹配,您可以看到它没有存储。

对于服务器端处理,数据保存在服务器上。如果您过滤数据并刷新页面,数据仍将被过滤。但是,对于非服务器端处理,文档 (?renderDataTable) 告诉您,“整个数据帧立即发送到浏览器”。再见过滤器:(。

【讨论】:

  • 是的,正如您提到的那样,设置 server = TRUE 确实会导致性能问题,并且还没有维护过滤器。所以你是说没有办法维护过滤器,只有过滤后的数据集不会导致严重的性能问题?
  • 嗯,这可能很有趣:github.com/rstudio/DT/issues/76:特别是:input$tbl_state。您可以将信息存储在文件中并重新加载。这是一种选择还是太脏而无法解决?
  • 是的,在发布自己的问题之前,我仔细查看了该帖子,但无法复制 yihui 的解决方案。我收到一个错误Error in datatable: unused argument (server = TRUE)
猜你喜欢
  • 2019-07-04
  • 2018-10-04
  • 2017-05-05
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多