How to build a dendrogram from a directory tree?

后端 未结 3 578
伪装坚强ぢ
伪装坚强ぢ 2020-12-23 18:05

Given a root absolute directory path. How do I generate a dendrogram object of all path\'s below it so that I can visualize the directory tree with R?

Suppose the fo

3条回答
  •  抹茶落季
    2020-12-23 18:18

    Here's a possible approach to get what you originally asked for which is a system like tree. This will give a data.tree object that's pretty flexible and could be made to plot like you might want but it's not entirely clear to me what you want:

    path <- c(
        "root/a/some/file.R", 
        "root/a/another/file.R", 
        "root/a/another/cool/file.R", 
        "root/b/some/data.csv", 
        "root/b/more/data.csv"
    )
    
    
    library(data.tree); library(plyr)
    
    x <- lapply(strsplit(path, "/"), function(z) as.data.frame(t(z)))
    x <- rbind.fill(x)
    x$pathString <- apply(x, 1, function(x) paste(trimws(na.omit(x)), collapse="/"))
    (mytree <- data.tree::as.Node(x))
    
    1  root                  
    2   ¦--a                 
    3   ¦   ¦--some          
    4   ¦   ¦   °--file.R    
    5   ¦   °--another       
    6   ¦       ¦--file.R    
    7   ¦       °--cool      
    8   ¦           °--file.R
    9   °--b                 
    10      ¦--some          
    11      ¦   °--data.csv  
    12      °--more          
    13          °--data.csv  
    
    
    plot(mytree)
    

    You can get the parts you want (I think) but it'll require you to do the leg work and figure out conversion between data types in data.tree: https://cran.r-project.org/web/packages/data.tree/vignettes/data.tree.html#tree-conversion

    I use this approach in my pathr package's tree function when use.data.tree = TRUE https://github.com/trinker/pathr#tree

    EDIT Per@Luke's comment below...data.tree::as.Node takes a path directly:

    (mytree <- data.tree::as.Node(data.frame(pathString = path)))
    
                    levelName
    1  root2                 
    2   ¦--a                 
    3   ¦   ¦--some          
    4   ¦   ¦   °--file.R    
    5   ¦   °--another       
    6   ¦       ¦--file.R    
    7   ¦       °--cool      
    8   ¦           °--file.R
    9   °--b                 
    10      ¦--some          
    11      ¦   °--data.csv  
    12      °--more          
    13          °--data.csv  
    

提交回复
热议问题