tree | R Documentation |
Draw a tree using box drawing characters. Unicode characters are
used if available. (Set the cli.unicode
option if auto-detection
fails.)
tree(
data,
root = data[[1]][[1]],
style = NULL,
width = console_width(),
trim = FALSE
)
data |
Data frame that contains the tree structure. The first column is an id, and the second column is a list column, that contains the ids of the child nodes. The optional third column may contain the text to print to annotate the node. |
root |
The name of the root node. |
style |
Optional box style list. |
width |
Maximum width of the output. Defaults to the |
trim |
Whether to avoid traversing the same nodes multiple times.
If |
A node might appear multiple times in the tree, or might not appear at all.
data <- data.frame( stringsAsFactors = FALSE, package = c("processx", "backports", "assertthat", "Matrix", "magrittr", "rprojroot", "clisymbols", "prettyunits", "withr", "desc", "igraph", "R6", "crayon", "debugme", "digest", "irlba", "rcmdcheck", "callr", "pkgconfig", "lattice"), dependencies = I(list( c("assertthat", "crayon", "debugme", "R6"), character(0), character(0), "lattice", character(0), "backports", character(0), c("magrittr", "assertthat"), character(0), c("assertthat", "R6", "crayon", "rprojroot"), c("irlba", "magrittr", "Matrix", "pkgconfig"), character(0), character(0), "crayon", character(0), "Matrix", c("callr", "clisymbols", "crayon", "desc", "digest", "prettyunits", "R6", "rprojroot", "withr"), c("processx", "R6"), character(0), character(0) )) ) tree(data)
#> processx #> ├─assertthat #> ├─crayon #> ├─debugme #> │ └─crayon #> └─R6
tree(data, root = "rcmdcheck")
#> rcmdcheck #> ├─callr #> │ ├─processx #> │ │ ├─assertthat #> │ │ ├─crayon #> │ │ ├─debugme #> │ │ │ └─crayon #> │ │ └─R6 #> │ └─R6 #> ├─clisymbols #> ├─crayon #> ├─desc #> │ ├─assertthat #> │ ├─R6 #> │ ├─crayon #> │ └─rprojroot #> │ └─backports #> ├─digest #> ├─prettyunits #> │ ├─magrittr #> │ └─assertthat #> ├─R6 #> ├─rprojroot #> │ └─backports #> └─withr
data$label <- paste(data$package, style_dim(paste0("(", c("2.0.0.1", "1.1.1", "0.2.0", "1.2-11", "1.5", "1.2", "1.2.0", "1.0.2", "2.0.0", "1.1.1.9000", "1.1.2", "2.2.2", "1.3.4", "1.0.2", "0.6.12", "2.2.1", "1.2.1.9002", "1.0.0.9000", "2.0.1", "0.20-35"), ")")) ) roots <- ! data$package %in% unlist(data$dependencies) data$label[roots] <- col_cyan(style_italic(data$label[roots])) tree(data, root = "rcmdcheck")
#> rcmdcheck (1.2.1.9002)
#> ├─callr (1.0.0.9000)
#> │ ├─processx (2.0.0.1)
#> │ │ ├─assertthat (0.2.0)
#> │ │ ├─crayon (1.3.4)
#> │ │ ├─debugme (1.0.2)
#> │ │ │ └─crayon (1.3.4)
#> │ │ └─R6 (2.2.2)
#> │ └─R6 (2.2.2)
#> ├─clisymbols (1.2.0)
#> ├─crayon (1.3.4)
#> ├─desc (1.1.1.9000)
#> │ ├─assertthat (0.2.0)
#> │ ├─R6 (2.2.2)
#> │ ├─crayon (1.3.4)
#> │ └─rprojroot (1.2)
#> │ └─backports (1.1.1)
#> ├─digest (0.6.12)
#> ├─prettyunits (1.0.2)
#> │ ├─magrittr (1.5)
#> │ └─assertthat (0.2.0)
#> ├─R6 (2.2.2)
#> ├─rprojroot (1.2)
#> │ └─backports (1.1.1)
#> └─withr (2.0.0)
pkgdeps <- list( "dplyr@0.8.3" = c("assertthat@0.2.1", "glue@1.3.1", "magrittr@1.5", "R6@2.4.0", "Rcpp@1.0.2", "rlang@0.4.0", "tibble@2.1.3", "tidyselect@0.2.5"), "assertthat@0.2.1" = character(), "glue@1.3.1" = character(), "magrittr@1.5" = character(), "pkgconfig@2.0.3" = character(), "R6@2.4.0" = character(), "Rcpp@1.0.2" = character(), "rlang@0.4.0" = character(), "tibble@2.1.3" = c("cli@1.1.0", "crayon@1.3.4", "fansi@0.4.0", "pillar@1.4.2", "pkgconfig@2.0.3", "rlang@0.4.0"), "cli@1.1.0" = c("assertthat@0.2.1", "crayon@1.3.4"), "crayon@1.3.4" = character(), "fansi@0.4.0" = character(), "pillar@1.4.2" = c("cli@1.1.0", "crayon@1.3.4", "fansi@0.4.0", "rlang@0.4.0", "utf8@1.1.4", "vctrs@0.2.0"), "utf8@1.1.4" = character(), "vctrs@0.2.0" = c("backports@1.1.5", "ellipsis@0.3.0", "digest@0.6.21", "glue@1.3.1", "rlang@0.4.0", "zeallot@0.1.0"), "backports@1.1.5" = character(), "ellipsis@0.3.0" = c("rlang@0.4.0"), "digest@0.6.21" = character(), "glue@1.3.1" = character(), "zeallot@0.1.0" = character(), "tidyselect@0.2.5" = c("glue@1.3.1", "purrr@1.3.1", "rlang@0.4.0", "Rcpp@1.0.2"), "purrr@0.3.3" = c("magrittr@1.5", "rlang@0.4.0") ) pkgs <- data.frame( stringsAsFactors = FALSE, name = names(pkgdeps), deps = I(unname(pkgdeps)) ) tree(pkgs, trim = TRUE)
#> dplyr@0.8.3 #> ├─assertthat@0.2.1 #> ├─glue@1.3.1 #> ├─magrittr@1.5 #> ├─R6@2.4.0 #> ├─Rcpp@1.0.2 #> ├─rlang@0.4.0 #> ├─tibble@2.1.3 #> │ ├─cli@1.1.0 #> │ │ ├─assertthat@0.2.1 #> │ │ └─crayon@1.3.4 #> │ ├─crayon@1.3.4 #> │ ├─fansi@0.4.0 #> │ ├─pillar@1.4.2 #> │ │ ├─cli@1.1.0 #> │ │ ├─crayon@1.3.4 #> │ │ ├─fansi@0.4.0 #> │ │ ├─rlang@0.4.0 #> │ │ ├─utf8@1.1.4 #> │ │ └─vctrs@0.2.0 #> │ │ ├─backports@1.1.5 #> │ │ ├─ellipsis@0.3.0 #> │ │ │ └─rlang@0.4.0 #> │ │ ├─digest@0.6.21 #> │ │ ├─glue@1.3.1 #> │ │ ├─rlang@0.4.0 #> │ │ └─zeallot@0.1.0 #> │ ├─pkgconfig@2.0.3 #> │ └─rlang@0.4.0 #> └─tidyselect@0.2.5 #> ├─glue@1.3.1 #> ├─rlang@0.4.0 #> └─Rcpp@1.0.2
# Mark the trimmed nodes pkgs$label <- pkgs$name pkgs$trimmed <- paste(pkgs$name, " (trimmed)") tree(pkgs, trim = TRUE)
#> dplyr@0.8.3 #> ├─assertthat@0.2.1 #> ├─glue@1.3.1 #> ├─magrittr@1.5 #> ├─R6@2.4.0 #> ├─Rcpp@1.0.2 #> ├─rlang@0.4.0 #> ├─tibble@2.1.3 #> │ ├─cli@1.1.0 #> │ │ ├─assertthat@0.2.1 (trimmed) #> │ │ └─crayon@1.3.4 #> │ ├─crayon@1.3.4 (trimmed) #> │ ├─fansi@0.4.0 #> │ ├─pillar@1.4.2 #> │ │ ├─cli@1.1.0 (trimmed) #> │ │ ├─crayon@1.3.4 (trimmed) #> │ │ ├─fansi@0.4.0 (trimmed) #> │ │ ├─rlang@0.4.0 (trimmed) #> │ │ ├─utf8@1.1.4 #> │ │ └─vctrs@0.2.0 #> │ │ ├─backports@1.1.5 #> │ │ ├─ellipsis@0.3.0 #> │ │ │ └─rlang@0.4.0 (trimmed) #> │ │ ├─digest@0.6.21 #> │ │ ├─glue@1.3.1 (trimmed) #> │ │ ├─rlang@0.4.0 (trimmed) #> │ │ └─zeallot@0.1.0 #> │ ├─pkgconfig@2.0.3 #> │ └─rlang@0.4.0 (trimmed) #> └─tidyselect@0.2.5 #> ├─glue@1.3.1 (trimmed) #> ├─rlang@0.4.0 (trimmed) #> └─Rcpp@1.0.2 (trimmed)
Character vector, the lines of the tree drawing.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.