【发布时间】:2016-12-08 02:34:43
【问题描述】:
第一次在这里发布海报。我通常能够在不发布的情况下获得所有答案,但这确实让我难过。我是一个没有任何 javascript 经验的中级 R 用户。这是我正在尝试做的事情:
我有一个数据表,它通过操作按钮对我的数据进行子集化使用交互式闪亮过滤器,以及内置的数据表过滤器。操作按钮通过对数据框进行子集化来执行批量过滤。我遇到的问题是,每当应用这些批量过滤器之一时,都会重新呈现数据表并清除所有单独的列过滤器。我希望能够在对数据进行子集化和重新呈现表格时保持各个列过滤器处于活动状态。
我设法发现我可以使用 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)
非常感谢。
编辑:
好的,我已经做到了,它应该是可重现的(需要 shinyBS 和 DT 包)。
我正在尝试做的是找到一种方法来维护当前的 DT 过滤器,当基于操作按钮启动的子集重新呈现表时。在此示例中,您可以看到重新渲染表格后过滤器被清除。
谢谢!
【问题讨论】:
-
你能创建一个 JSFiddle 或 codepen 来说明你的子集吗?无需真实数据...
-
嘿杰罗米。我添加了一个使用 Iris 数据集的示例。谢谢!
-
酷!呃……在哪里?链接?
-
@JeromyFrench - 这是在询问
R/shiny环境中的 Javascript,所以jsfiddle不起作用 -
@Jeromy,我查找了 jsfiddle 并意识到它使用了 Javascript。所以我对此一无所知。我编辑了我的帖子以包含一些要在 R 中重现的内容。但是,从我不懈的研究中,我意识到您可以将 Javascript 输入到数据表选项中接受的参数中。但对此一无所知,我希望有一个善良的灵魂来编写我需要的代码。
标签: javascript r datatables shiny