| dendrapply {stats} | R Documentation |
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.
dendrapply(X, FUN, ...)
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. |
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.
this is still somewhat experimental, and suggestions for enhancements (or nice examples of usage) are very welcome.
Martin Maechler
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.
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)