r - 如何在 R 中输出树状人类可读的对象结构
问题描述
我经常向我的同行教授 R,并解释嵌套数据的结构(例如嵌套列表)可能是一项艰巨的任务,我发现创建视觉辅助工具可以走很长的路。
但是,诸如函数之类的函数的输出str()
包含大量信息,并且不是人类最易读的格式,因此我尝试将此输出格式化,然后使用 RegEx 获得更易读的输出。我经历了一些警告,并且对字符串操作不是很精通,我希望能得到一些帮助。
给定以下对象:
object <- list(
a = 1:5,
b = matrix(c(1, 3, "a", "i"), byrow = TRUE),
l1 = list(
data = data.frame(
x = letters,
y = LETTERS
),
vec = "The river",
l2 = list(
abc = seq(1, 9, by = 2),
col = "#445f43"
)
),
data2 = data.frame(
x = c("a","h"),
y = runif(2, 9, 90)
),
rand = runif(12, 99, 120),
form = y~x^4
)
预期的输出将是一个树渲染:
object
├── a 'int'
├── b 'chr'
├── l1 'list'
│ ├── data 'data.frame'
│ │ ├── x 'factor'
│ │ └── y 'factor'
│ ├── vec 'chr'
│ └── l2 'list'
│ ├── abc 'chr'
│ └── col 'chr'
├── data2 'data.frame'
│ ├── x 'factor'
│ └── y 'num'
├── rand 'num'
└── form 'formula'
我想写一个函数来提供这个输出,并添加一些参数来返回列表元素的长度和其他信息,也许还有颜色编码的类。
解决方案
它可以帮助:
a = Hmisc::list.tree(object, fill = " | ", attr.print = F, size = F, maxlen = 1)
object = list 6
| a = integer 5= 1 ...
| b = character 4= array 4 X 1= 1 ...
| l1 = list 3
| | data = list 2( data.frame )
| | | x = character 26= a ...
| | | y = character 26= A ...
| | vec = character 1= T
| | l2 = list 2
| | | abc = double 5= 1 ...
| | | col = character 1= #
| data2 = list 2( data.frame )
| | x = character 2= a ...
| | y = double 2= 11.16 ...
| rand = double 12= 110.91 ...
| form = language 3( formula )
推荐阅读
- python - 优步路德维希:问题预测
- visual-studio-code - vscode 工作空间可以使用相对路径
- angular - 路线不断被重定向
- python - 机器学习 - 如何从管道中提取特征
- python - 在 pandas DataFrame 中选择具有特定值的列
- r - 在 R 的一个文件夹中的多个 xml 文件上运行循环
- javascript - 如何使用将多个值传递给服务器使用 node.js 标记和访问
- django - Django taggit:为什么 annotate(same_tags=Count('tags')) 计算的是常用标签的数量而不是标签的总数?
- python - Python - Pynput 按键似乎与实际按键不同
- bash - 如何找到名称包含多个相同字符的文件?