# dendrapply

##### Apply a Function to All Nodes of a Dendrogram

Apply function `FUN`

to each node of a `dendrogram`

recursively. When `y <- dendrapply(x, fn)`

, then `y`

is a
dendrogram of the same graph structure as `x`

and for each node,
`y.node[j] <- FUN( x.node[j], ...)`

(where `y.node[j]`

is an
(invalid!) notation for the j-th node of y.

- Keywords
- iteration

##### Usage

`dendrapply(X, FUN, ...)`

##### Arguments

- X
- an object of class
`"dendrogram"`

. - FUN
- an R function to be applied to each dendrogram node,
typically working on its
`attributes`

alone, returning an altered version of the same node. - …
- potential further arguments passed to
`FUN`

.

##### Value

Usually a dendrogram of the same (graph) structure as `X`

.
For that, the function must be conceptually of the form
`FUN <- function(X) { attributes(X) <- .....; X }`

,
i.e., returning the node with some attributes added or changed.

##### Note

The implementation is somewhat experimental and suggestions for
enhancements (or nice examples of usage) are very welcome. The
current implementation is *recursive* and inefficient for
dendrograms with many non-leaves. See the ‘Warning’ in
`dendrogram`

.

##### See Also

`as.dendrogram`

, `lapply`

for applying
a function to each component of a `list`

, `rapply`

for doing so to each non-list component of a nested list.

##### Examples

`library(stats)`

```
require(graphics)
## a smallish simple dendrogram
dhc <- as.dendrogram(hc <- hclust(dist(USArrests), "ave"))
(dhc21 <- dhc[[2]][[1]])
## too simple:
dendrapply(dhc21, function(n) utils::str(attributes(n)))
## toy example to set colored leaf labels :
local({
colLab <<- function(n) {
if(is.leaf(n)) {
a <- attributes(n)
i <<- i+1
attr(n, "nodePar") <-
c(a$nodePar, list(lab.col = mycols[i], lab.font = i%%3))
}
n
}
mycols <- grDevices::rainbow(attr(dhc21,"members"))
i <- 0
})
dL <- dendrapply(dhc21, colLab)
op <- par(mfrow = 2:1)
plot(dhc21)
plot(dL) ## --> colored labels!
par(op)
```

*Documentation reproduced from package stats, version 3.3.3, License: Part of R 3.3.3*