dendrapply {stats} | R Documentation |
Apply a Function to All Nodes of a Dendrogram
Description
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).
Usage
dendrapply(X, FUN, ...)
Arguments
X |
an object of class |
FUN |
an R function to be applied to each dendrogram node,
typically working on its |
... |
potential further arguments passed to |
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
.
Author(s)
Martin Maechler
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
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)