如何在R Shiny中使用selectizeGroupUI设置默认筛选选项
设置selectizeGroupUI的默认选中项
我完全理解你的困扰——默认全选对于大数据集来说确实太影响性能和用户体验了,想要指定初始筛选组合来给用户做示例是个很合理的需求。其实selectizeGroupServer模块本身就支持设置默认选中值,你不需要在UI层做修改,只需要在调用模块的时候加上selected参数就行。
核心解决思路
在调用selectizeGroupServer模块时,添加selected参数,传入一个键值对列表:键对应你在vars里声明的变量名,值就是你想要默认选中的选项内容。这样模块初始化时就会自动选中指定选项,而不是全选所有内容。
修改后的完整代码
library(shinyWidgets) library(DT) library(dplyr) library(tidyr) # 模拟你的输入数据集 tf <- tibble( var_1 = c(rep("red",3), rep("blue",3), rep("green",3)), var_2 = c(rep("table1",3), rep("table2",3), rep("table3",3)), var_3 = c(rep("column1",3), rep("column2",3), rep("column3",3)) ) 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"), # 关键:添加默认选中项配置 selected = list(var_1 = "red", var_2 = "table1") ) 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) )
效果说明
修改后,应用启动时会自动选中var_1 = red和var_2 = table1,默认只显示对应的3行数据,而不是全部9行。用户后续仍然可以自由调整筛选器选项,完全不影响交互功能。
需要注意的是:selected里的选项必须是对应变量在数据中实际存在的值,否则模块会忽略无效的默认值,回到全选状态。
内容的提问来源于stack exchange,提问作者AFS
相关产品推荐
相关产品推荐

