如何扩展tibble嵌套数据类型(列表列)的打印显示?
如何自定义tibble列表列的打印格式?
tibble的打印系统基于pillar包,通过为特定数据类型注册自定义格式化函数,就能实现列表列内嵌套内容的直接打印,无需转换数据结构。
1. 展开call类型的列表列打印
默认情况下,tibble会将list中的call对象显示为<language>,我们可以为language类(call属于language类型)注册自定义格式化函数,复用call自身的打印逻辑:
library(tibble) library(pillar) # 为language类型注册格式化函数,生成call的可读字符串 format.language <- function(x, ...) { deparse(x, width.cutoff = 500) } # 测试代码 b <- tibble(a = 1, prior = list(call("rnorm", quote(N), mean = 0, sd = 2))) b
执行后打印结果:
# A tibble: 1 × 2 a prior <dbl> <list> 1 1 rnorm(N, mean = 0, sd = 2)
2. 以dput风格打印嵌套列表的列表列
针对嵌套列表,我们可以为list类型注册格式化函数,生成类似dput的输出格式:
library(tibble) library(pillar) # 为list类型注册格式化函数,生成dput风格字符串 format.list <- function(x, ...) { deparse(x, width.cutoff = 500) } # 测试代码 a <- tibble(id = 1:2, data = list(list(x = 1, y = 2), list(a = 3, b = 4))) a
执行后打印结果:
# A tibble: 2 × 2 id data <int> <list> 1 1 list(x = 1, y = 2) 2 2 list(a = 3, b = 4)
注意事项
- 上述格式化函数为全局生效,会影响所有tibble中对应类型的打印;若需临时生效,可结合
withr::local_options()控制作用域。 deparse()的width.cutoff参数可调整输出宽度,避免长内容被截断。
内容的提问来源于stack exchange,提问作者Tomas
相关产品推荐
相关产品推荐

