R: Get attributes of dendrogram's nodes

get_nodes_attr {dendextend} | R Documentation

## Get attributes of dendrogram's nodes

### Description

Allows easy access to attributes of branches and/or leaves, with option of returning a vector with/withough NA's (for marking the missing attr value)

### Usage

    get_nodes_attr(dend, attribute, id, include_leaves = TRUE,
      include_branches = TRUE, simplify = TRUE, na.rm = FALSE, ...)

### Arguments

`dend` | a dendrogram object
`attribute` | character scalar of the attribute (`attr`) we wish to get from the nodes
`id` | integer vector. If given - only the attr of these nodes id will be returned (via depth first search)
`include_leaves` | logical. Should leaves attributes be included as well?
`include_branches` | logical. Should non-leaf (branch node) attributes be included as well?
`simplify` | logical (default is TRUE). should the result be simplified to a vector (using simplify2array ) if possible? If it is not possible it will return a matrix. When FALSE, a list is returned.
`na.rm` | logical. Should NA attributes be REMOVED from the resulting vector?
`...` | not used

### Value

A vector with the dendrogram's nodes attribute. If an attribute is missing from some nodes, it will return NA in that vector.

### Source

Heavily inspired by the code in the function `labels.dendrogram`, so credit should go to Martin Maechler.

### See Also

get_leaves_attr, nnodes, nleaves

### Examples

    # define dendrogram object to play with:
    hc <- hclust(dist(USArrests[1:3,]), "ave")
    dend <- as.dendrogram(hc)

    # get_leaves_attr(dend) # error :)
    get_leaves_attr(dend, "label")
    labels(dend, "label")
    get_leaves_attr(dend, "height") # should be 0's
    get_nodes_attr(dend, "height")

    get_leaves_attr(dend, "leaf") # should be TRUE's
    get_nodes_attr(dend, "leaf") # conatins NA's

    get_leaves_attr(dend, "members") # should be 1's
    get_nodes_attr(dend, "members", include_branches = FALSE, na.rm = TRUE) #
    get_nodes_attr(dend, "members") #
    get_nodes_attr(dend, "members",  simplify = FALSE)
    get_nodes_attr(dend, "members", include_leaves = FALSE, na.rm = TRUE) #

    get_nodes_attr(dend, "members",  id = c(1,3), simplify = FALSE)
    get_nodes_attr(dend, "members", id = c(1,3)) #

    hang_dend <- hang.dendrogram(dend)
    get_leaves_attr(hang_dend, "height") # no longer 0!
    get_nodes_attr(hang_dend, "height") # does not include any 0s!

    # does not include leaves values:
    get_nodes_attr(hang_dend, "height", include_leaves = FALSE)
    # remove leaves values all together:
    get_nodes_attr(hang_dend, "height", include_leaves = FALSE, na.rm = TRUE)

    ## Not run:
    library(microbenchmark)
    # get_leaves_attr is twice faster than get_nodes_attr
    microbenchmark(   get_leaves_attr(dend, "members"), # should be 1's
                        get_nodes_attr(dend, "members", include_branches = FALSE, na.rm = TRUE)
                   )

    ## End(Not run)

[Package dendextend version 1.8.0 Index]