首页 > 解决方案 > 如何在 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'          

我想写一个函数来提供这个输出,并添加一些参数来返回列表元素的长度和其他信息,也许还有颜色编码的类。

编辑:刚刚在这里发现了与我类似的其他问题:和这里

标签: robjectdata-structures

解决方案


它可以帮助:

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 )

推荐阅读