给出根绝对目录路径。如何生成其下面所有路径的树状图对象,以便可以使用R可视化目录树?
假设以下调用返回了以下叶子节点。list.files(path, full.names = TRUE, recursive = TRUE
)
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
我想像unix
tree
程序的输出一样在R中作图:root
├── a
│ ├── another
│ │ ├── cool
│ │ │ └── file.R
│ │ └── file.R
│ └── some
│ └── file.R
└── b
├── more
│ └── data.csv
└── some
└── data.csv
如果解决方案涉及将文件系统树分解为两个
data.frame
,则它将特别有用:然后根据这两个
data.frame
构建树形图对象。 最佳答案
这是一种获取您最初要求的系统(例如树)的可行方法。这将提供一个非常灵活的data.tree
对象,可以按照您想要的方式进行绘制,但是对我来说,尚不清楚您想要什么:
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)
您可以得到想要的部分(我认为),但这需要您做一些工作,并找出
data.tree
中的数据类型之间的转换:https://cran.r-project.org/web/packages/data.tree/vignettes/data.tree.html#tree-conversion当
tree
https://github.com/trinker/pathr#tree时,我在路径包的use.data.tree = TRUE
函数中使用了这种方法编辑 Per @ Luke在下面的评论...
data.tree::as.Node
直接采用路径:(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
关于r - 如何从目录树构建树状图?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36094183/