2017-06-16 25 views
0

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

样本代码如下:

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) 

回答

0

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

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

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

+0

是的,正如你所提到的那样,设置'server = TRUE'确实会导致性能问题,并且还没有维护过滤器,所以你说没有办法维护过滤器,只是过滤数据集没有造成显着的性能问题? – User247365

+0

然后这可能是有趣的:github.com/rstudio/DT/issues/76:特别是:输入$ tbl_state。您可以将信息存储在一个文件中并重新加载它。太肮脏的解决方法? – BigDataScientist

+0

是的,我在发表自己的问题之前,广泛查看了该帖子,无法复制yihui的解决方案。我收到一个错误'数据表中的错误:未使用的参数(服务器= TRUE)' – User247365