One untangle function to rule them all.

This function untangles dendrogram lists (dendlist), Using various heuristics.

untangle(dend1, ...)

# S3 method for default
untangle(dend1, ...)

untangle_labels(dend1, dend2, ...)

# S3 method for dendrogram
untangle(
dend1,
dend2,
method = c("labels", "ladderize", "random", "step1side", "step2side", "DendSer"),
...
)

# S3 method for dendlist
untangle(
dend1,
method = c("labels", "ladderize", "random", "step1side", "step2side", "DendSer"),
which = c(1L, 2L),
...
)

## Arguments

dend1 a dednrogram or a dendlist object passed to the releavnt untangle function A second dednrogram (to untangle against) a character indicating the type of untangle heuristic to use. an integer vector of length 2, indicating which of the trees in the dendlist object should be plotted

## Value

A dendlist, with two trees after they have been untangled.

If the dendlist was originally larger than 2, it will return the original dendlist but with the relevant trees properly rotate.

## Details

This function wraps all of the untagnle functions, in order to make it easier to find our about (and use) them.

Tal Galili

## Examples

if (FALSE) {
set.seed(23235)
ss <- sample(1:150, 10)
dend1 <- iris[ss, -5] %>%
dist() %>%
hclust("com") %>%
as.dendrogram()
dend2 <- iris[ss, -5] %>%
dist() %>%
hclust("sin") %>%
as.dendrogram()
dend12 <- dendlist(dend1, dend2)

dend12 %>% tanglegram()

untangle(dend1, dend2, method = "random", R = 5) %>% tanglegram()

# it works, and we get something different:
set.seed(1234)
dend12 %>%
untangle(method = "random", R = 5) %>%
tanglegram()

set.seed(1234)
# fixes it completely:
dend12 %>%
untangle(method = "random", R = 5) %>%
untangle(method = "step1") %>%
tanglegram()
# not good enough
dend12 %>%
untangle(method = "step1") %>%
tanglegram()
# not good enough
dend12 %>%
untangle(method = "step2") %>%
tanglegram()
# How we might wish to use it:
set.seed(12777)
dend12 %>%
untangle(method = "random", R = 1) %>%
untangle(method = "step2") %>%
tanglegram()
}