第一次在这里发布海报。我通常能够在没有发布的情况下获得我所有的答案,但是这个问题真的让我感到困惑。我是一个没有JavaScript经验的中级R用户。这是我想要做的:交互式数据表:在重新渲染表后保留列过滤器
我有一个数据表,使用交互式闪亮过滤器通过行动按钮,我的数据的子集,也内置的数据过滤器。操作按钮通过对数据帧进行子集化来执行批量过滤。我遇到的问题是,只要应用了其中一个批量过滤器,就会重新渲染数据表,并清除所有单个列过滤器。我希望能够在数据被子集化和表格重新呈现时保持单个列过滤器处于活动状态。
我已经设法发现,我可以使用输入$ 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)
非常感谢。
编辑:
OK我做了它,这样它应该是可重复的(需要shinyBS和DT包)。
我想要做的是找到一种方法来保持当前的DT过滤器,当表重新呈现基于动作按钮启动的子集。在这个例子中,你可以看到表格重新渲染后,过滤器被清除。
谢谢!
你可以创建一个JSFiddle或codepen来说明你的子集?不需要真实的数据... –
嘿,Jeromy。我已经添加了一个使用Iris数据集的示例。谢谢! – Balter
酷!呃......在哪里?链接? –