使用DT::datatable格式化后是否可以重新选择展示的数据表列
实现方案说明
你示例中在datatable()后链式调用select()的写法无法直接生效:DT::datatable()执行后返回的是DT htmlwidget组件对象,并非数据框结构,dplyr的select()仅支持处理数据框类对象,直接调用会报错。
针对你「先对全量数据表应用自定义样式,再动态筛选展示列」的需求,有两种成熟实现方案:
方案1:代码层面预先指定展示列
通过datatable的options中columns的visible参数控制列可见性,全量数据会先应用所有预设格式化规则,再隐藏不需要的列,不会丢失样式配置。
示例代码:
library(DT) library(dplyr) # 定义需要展示的列名,可动态赋值 show_cols <- c("mpg", "cyl") # 批量生成列可见性配置 col_vis_config <- lapply(colnames(mtcars), function(col) { list(visible = col %in% show_cols) }) mtcars %>% datatable( options = list( dom = "l", # 保留你原有的每页行数选择配置 columns = col_vis_config ) # 其他全表自定义样式、格式化规则都可以在这里添加,对全列生效 )
方案2:支持用户前端手动切换列可见性
如果需要允许用户自主选择要展示的列,直接启用DT的Buttons扩展的列可见性按钮即可,所有预设样式会在列切换时保留:
示例代码:
library(DT) library(dplyr) mtcars %>% datatable( extensions = "Buttons", options = list( dom = "lBfrtip", # 原有l配置保留,新增B加载按钮组件 buttons = list("colvis") # 列可见性切换按钮 ) # 其他全表自定义样式、格式化规则统一在这里配置即可 )
以上两种方案均是基于全量数据初始化DT组件,你预先配置的所有自定义样式、格式化规则都会应用到全表所有列,隐藏列仅为前端不可见,样式不会丢失。
内容的提问来源于stack exchange,提问作者DJC
相关产品推荐
相关产品推荐

