2

我正在使用 selectizeGroupUI 在 Shiny 中创建动态过滤器。问题是我无法设置输出的默认选择,现在我的应用程序正在从两个现有过滤器中选择所有内容。这对我不起作用,因为包含所有数据的真实表非常大。所以,我想知道如何将特定的过滤器组合设置为默认值,这可以说明用户开始使用该应用程序,但不像现在选择每个组合那样大。

我知道如何通过使用设置默认选择

selectInput(...,selected = 'table1',...) 

但现在我不知道如何使用 selectizeGroupUI 应用该逻辑。

在这里您现在可以看到我的代码,它同时显示所有过滤器组合:

library(shinyWidgets)

tf<-test_2_filtros

shinyApp(
  ui = pageWithSidebar(
    headerPanel("Conditional Filters"),
    sidebarPanel(
      selectizeGroupUI(
        id = "my-filters",
        inline = FALSE,
        params = list(
          var_one = list(inputId = "var_1", title = "Select variable 1", placeholder = 'select'),
          var_two = list(inputId = "var_2", title = "Select variable 2", placeholder = 'select')
        )
      )
    ),
    
    mainPanel(
      DT::dataTableOutput("table")
    )
  ),
  
  server = function(input, output, session) {
    
    res_mod <- callModule(
      module = selectizeGroupServer,
      id = "my-filters",
      data = tf,
      vars = c("var_1", "var_2")
    )
    
    
    
    output$table <- DT::renderDataTable({
      req(res_mod())
      mytable<-res_mod() %>%
        dplyr::mutate(n = "Yes") %>%
        mutate(row_num = 1:n()) %>%
        tidyr::pivot_wider(names_from = var_3, values_from = n, values_fill = list(n = "No"))%>%
        select(-row_num)
      mytable<-DT::datatable(mytable, filter= 'top',options = list(order=list(0,'asc'), dom='t', pageLength= 100, autoWidth = TRUE),rownames = FALSE)
      formatStyle(mytable, columns = NULL, fontWeight = styleEqual(c('No', 'Yes'), c('normal', 'bold')))
      
    })
    
  },
  
  options = list(height = 500)
)

在这里你可以找到我的输入和输出:

输入(上面代码中的 tf)

var_1 var_2 var_3
红色的 表格1 第 1 列
红色的 表格1 第 1 列
红色的 表格1 第 1 列
蓝色的 表2 第 2 列
蓝色的 表2 第 2 列
蓝色的 表2 第 2 列
绿色 表3 第 3 列
绿色 表3 第 3 列
绿色 表3 第 3 列

输出

var_1 var_2 第 1 列 第 2 列 第 3 列
红色的 表格1 是的
红色的 表格1 是的
红色的 表格1 是的
蓝色的 表2 是的
蓝色的 表2 是的
蓝色的 表2 是的
绿色 表3 是的
绿色 表3 是的
绿色 表3 是的

感谢您提供任何帮助或反馈。

4

1 回答 1

1

首先,获取输入变量的名称。然后为给定变量定义一个默认值。我已经展示了如何使用下面的一些默认值进行过滤var_1。您可以对其他输入变量执行相同的操作。

output$t1 <- renderText({print(names(input)) })  ###  get names of input variables

output$table <- DT::renderDataTable({
  if (is.null(input[["my-filters-var_1"]])) {filt1 <- c("red","blue")  ## default values for var_1
  }else filt1 <- input[["my-filters-var_1"]]
  req(res_mod())
  mytable<-res_mod() %>%
    dplyr::filter(var_1 %in% filt1) %>%   
    dplyr::mutate(n = "Yes") %>%
    mutate(row_num = 1:n()) %>%
    tidyr::pivot_wider(names_from = var_3, values_from = n, values_fill = list(n = "No"))%>%
    select(-row_num)
  mytable<-DT::datatable(mytable, filter= 'top',options = list(order=list(0,'asc'), dom='t', pageLength= 100, autoWidth = TRUE),rownames = FALSE)
  formatStyle(mytable, columns = NULL, fontWeight = styleEqual(c('No', 'Yes'), c('normal', 'bold')))
  
})
于 2021-09-18T21:32:17.117 回答