第一次在这里发海报。我通常不用发帖就能得到所有答案,但这一个确实难倒了我。我是一名中级 R 用户,没有任何 javascript 经验。这就是我想做的:
我有一个数据表,它通过操作按钮使用交互式闪亮过滤器(对我的数据进行子集化),还使用内置数据表过滤器。操作按钮通过对数据帧进行子集化来执行批量过滤。我遇到的问题是,每当应用这些批量过滤器之一时,数据表就会重新呈现,并且所有单独的列过滤器都会被清除。我希望能够在数据子集化和重新呈现表时使各个列过滤器保持活动状态。
我设法发现我可以使用 input$mytable_search_columns 输出这些信息并将其与数据表隔离,但我不知道如何编写在重新呈现表时应用此标准的 JavaScript。
library(shinyBS)
library(DT)
server <- function(input, output, session) {
df <- reactive({iris})
df.sub <- reactive({
if(input$buttonfilter == 0){
df.sub <- df()
}
if(input$buttonfilter == 1){
df.sub <- subset(df(), subset = Species == 'setosa')
}
df.sub
})
output$mytable <- DT::renderDataTable(df.sub(),
filter = 'top')
output$filters <- renderText({input$mytable_search_columns})
}
ui <- fluidPage(
h3('Button Toggle Filter'),
bsButton("buttonfilter","Show only Setosa", type = 'toggle'),
br(),
br(),
h3('Current filters'),
textOutput('filters'),
br(),
br(),
DT::dataTableOutput('mytable')
)
shinyApp(ui = ui, server = server)
非常感谢。
EDIT:
好的,我已经做到了,它应该是可重现的(需要闪亮BS和DT包)。
我想做的是找到一种方法,当根据操作按钮启动的子集重新呈现表时,维护当前的 DT 过滤器。在此示例中,您可以看到重新呈现表格后过滤器被清除。
谢谢你!