Ivan Alves
2012-Oct-24 11:30 UTC
[R] recursive function on a structured list of lists (dendrogram)
Dear all,
I have been trying the following without avail and would be very grateful for
any help. From a dendrogram (recursive list of lists with some structure), I
would like to obtain some information of the component lists and of the
enclosing list at the same time. In dendrogram-speech I basically would like
the label of the leaf and the height of the enclosing branch.
A dendrogram example (from the help file of stats::dendrogram), and some
functions showing how it is structured:
hc <- hclust(dist(USArrests), "ave")
dend1 <- as.dendrogram(hc)
plot(dend1)
str(dend1)
Similarly to dendrapply(), I tried o recursively obtain from the tree a list
including, for each member (leaf) the height of the list containing it. However,
I fail to fully grasp how the 'recursiveness' is made within the
function saving both elements at the leaf and branch levels. For reference the
dendrapply function is as follows:
function (X, FUN, ...)
{
FUN <- match.fun(FUN)
if (!inherits(X, "dendrogram"))
stop("'X' is not a dendrogram")
Napply <- function(d) {
r <- FUN(d, ...)
if (!is.leaf(d)) {
if (!is.list(r))
r <- as.list(r)
if (length(r) < (n <- length(d)))
r[seq_len(n)] <- vector("list", n)
r[] <- lapply(d, Napply)
}
r
}
Napply(X)
}
I essentially don't manage to 'save' the height of a branch (a list
of lists) so that it can be used at the next iterations for adding to the leafs
there. Many thanks for any guidance on how to recursively implement a function.
Kind regards,
Ivan
[[alternative HTML version deleted]]
