Как построить дендрограмму из дерева каталогов?
учитывая абсолютный путь корневого каталога. Как создать объект дендрограммы всех путей под ним, чтобы я мог визуализировать дерево каталогов с 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
Я хотел бы сделать сюжет в R, как выход unix tree
программа:
root
├── a
│ ├── another
│ │ ├── cool
│ │ │ └── file.R
│ │ └── file.R
│ └── some
│ └── file.R
└── b
├── more
│ └── data.csv
└── some
└── data.csv
было бы особенно полезно, если бы решение включало разложение дерева файловой системы на два data.frame
s:
- таблица узлов (с которой я мог бы включить такие атрибуты, как дата изменения)
- и таблица ребер (также с атрибутами)
и затем построение объекта дендрограммы из этих двух data.frame
s.
2 ответов
вот возможный подход, чтобы получить то, что вы изначально просили, что является системой, такой как дерево. Это даст 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
Я использую этот подход в своей pathr пакета
если вы находитесь в Windows, вы можете использовать мой пакет dir2json
, установив его так:
drat::addRepo("stlarepo")
install.packages("dir2json")
его также можно использовать в Linux, но есть DLL, связанная с динамическими библиотеками GHC, которые должны быть установлены в системе (в то время как эта DLL автономна в Windows).
> library(dir2json)
> cat(dir2tree("src"))
src
|
`- contrib
|
+- PACKAGES.gz
|
+- PACKAGES
|
+- jsonAccess_0.1.1.tar.gz
|
+- expansions_1.2.tar.gz
|
`- dir2json_2.1.0.tar.gz
> cat(dir2tree("src", vertical=TRUE))
src
|
contrib
|
---------------------------------------------------------------------------
/ | | | \
PACKAGES.gz PACKAGES jsonAccess_0.1.1.tar.gz expansions_1.2.tar.gz dir2json_2.1.0.tar.gz
пакет также содержит блестящее приложение, которое генерирует интерактивное представление дерева Reingold-Tilford папка:
> dir2json::shinyDirTree(".")