- 我有一个复杂的应用程序,在这里我试图将其分解到最低限度,以展示我面临的问题。
我使用shinyDataFilter
来过滤一个嵌套框。然而,我有一个嵌套框列表作为输入,对于每个嵌套框,我有一个与之关联的过滤器。
library(shiny)
# devtools::install_github("dgkf/shinyDataFilter")
library(shinyDataFilter)
ui <- fluidPage(
titlePanel("Filter Data Example"),
selectInput("dataset", "Select Dataset : ", c("df1", "df2")),
uiOutput("data_filter"),
dataTableOutput("table1"),
dataTableOutput("table2")
)
server <- function(input, output, session) {
list_data <- list(df1 = data.frame(col1 = factor(letters[1:5]), col2 = 1:5),
df2 = data.frame(col1 = factor(letters[3:18]), col2 = 3:18, col3 = 1:16))
rv <- reactiveValues()
observe({
rv$rv_child <- purrr::imap(list_data, function(x, y)
callModule(shiny_data_filter,paste0("data_filter_",y), data = x))
})
output$data_filter <- renderUI({
req(input$dataset)
nm <- paste0("data_filter_",input$dataset)
shiny_data_filter_ui(nm)
})
output$table1 <- renderDataTable({
req(rv$rv_child)
rv$rv_child$df1()
})
output$table2 <- renderDataTable({
req(rv$rv_child)
rv$rv_child$df2()
})
}
shinyApp(ui = ui, server = server)
字符串
要重现该问题,请运行以下代码,默认情况下,在表1中选择第一个表框。单击“添加过滤器”按钮后选择col1
,然后选择几个值。在表1中选择df2
,然后再次返回df1
。现在可以看到表1已经使用之前选择的值进行了过滤,但是,输入丢失,这让用户感到困惑。我的目标是显示过滤表对应的过滤器输入,使它们保持一致。当用户回到df1
时,他们会看到他们之前选择的输入。
的数据
1条答案
按热度按时间cbwuti441#
这个有用吗它保持所有过滤器可用,只是在点击下拉菜单中的一个项目时隐藏它们。过滤器现在在选择不同的数据框时不应该改变。
注意:在运行你的例子后,过滤器没有显示在我的环境中。这里可能还有一些包版本依赖的问题。
字符串
注2:如果只显示数据框和所选数据框的过滤器(
input$dataset
中的那个),我认为最好是为一个过滤器和表组合创建一个UI和服务器模块,然后为每个所需的数据框循环这个。但我猜这不是你想要的,对吗?