% File src/library/stats/man/dendrapply.Rd % Part of the R package, https://www.R-project.org % Copyright 1995-2015 R Core Team % Distributed under GPL 2 or later \name{dendrapply} \alias{dendrapply} \title{Apply a Function to All Nodes of a Dendrogram} \description{ Apply function \code{FUN} to each node of a \code{\link{dendrogram}} recursively. When \code{y <- dendrapply(x, fn)}, then \code{y} is a dendrogram of the same graph structure as \code{x} and for each node, \code{y.node[j] <- FUN( x.node[j], ...)} (where \code{y.node[j]} is an (invalid!) notation for the j-th node of y). } \usage{ dendrapply(X, FUN, ...) } \arguments{ \item{X}{an object of class \code{"\link{dendrogram}"}.} \item{FUN}{an \R function to be applied to each dendrogram node, typically working on its \code{\link{attributes}} alone, returning an altered version of the same node.} \item{\dots}{potential further arguments passed to \code{FUN}.} } \value{ Usually a dendrogram of the same (graph) structure as \code{X}. For that, the function must be conceptually of the form \code{FUN <- function(X) { attributes(X) <- .....; X }}, i.e., returning the node with some attributes added or changed. } \author{Martin Maechler} \note{ The implementation is somewhat experimental and suggestions for enhancements (or nice examples of usage) are very welcome. The current implementation is \emph{recursive} and inefficient for dendrograms with many non-leaves. See the \sQuote{Warning} in \code{\link{dendrogram}}. } \seealso{\code{\link{as.dendrogram}}, \code{\link{lapply}} for applying a function to each component of a \code{list}, \code{\link{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) } \keyword{iteration}