-
Notifications
You must be signed in to change notification settings - Fork 292
Expand file tree
/
Copy pathmodify_tree.Rd
More file actions
61 lines (55 loc) · 1.66 KB
/
modify_tree.Rd
File metadata and controls
61 lines (55 loc) · 1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/modify-tree.R
\name{modify_tree}
\alias{modify_tree}
\title{Recursively modify a list}
\usage{
modify_tree(
x,
...,
leaf = identity,
is_node = NULL,
pre = identity,
post = identity
)
}
\arguments{
\item{x}{A list.}
\item{...}{Reserved for future use. Must be empty}
\item{leaf}{A function applied to each leaf.}
\item{is_node}{A predicate function that determines whether an element is
a node (by returning \code{TRUE}) or a leaf (by returning \code{FALSE}). The
default value, \code{NULL}, treats simple lists as nodes and everything else
(including richer objects like data frames and linear models) as leaves,
using \code{\link[vctrs:obj_is_list]{vctrs::obj_is_list()}}. To recurse into all objects built on lists
use \code{\link[=is.list]{is.list()}}.}
\item{pre, post}{Functions applied to each node. \code{pre} is applied on the
way "down", i.e. before the leaves are transformed with \code{leaf}, while
\code{post} is applied on the way "up", i.e. after the leaves are transformed.}
}
\description{
\code{modify_tree()} allows you to recursively modify a list, supplying functions
that either modify each leaf or each node (or both).
}
\examples{
x <- list(list(a = 2:1, c = list(b1 = 2), b = list(c2 = 3, c1 = 4)))
x |> str()
# Transform each leaf
x |> modify_tree(leaf = \(x) x + 100) |> str()
# Recursively sort the nodes
sort_named <- function(x) {
nms <- names(x)
if (!is.null(nms)) {
x[order(nms)]
} else {
x
}
}
x |> modify_tree(post = sort_named) |> str()
}
\seealso{
Other modify variants:
\code{\link{map_depth}()},
\code{\link{modify}()}
}
\concept{modify variants}