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 jth 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
this is still somewhat experimental, and suggestions for enhancements (or nice examples of usage) are very welcome.
See Also
as.dendrogram
, lapply
for applying
a function to each component of a list
, rapply
for doing so to each nonlist 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)
Community examples
Looks like there are no examples yet.