# R/cal_node_limit.R In dendsort: Modular Leaf Ordering Methods for Dendrogram Nodes

#### Documented in cal_node_limit

```#' Calculate the x coordinates given a branch of dendrogram
#'
#' \code{cal_node_limit} is a code modified from plotNodeLimit()
#' to x coordinates of branches given a branch of dendrogram.
#'
#' @param x1 A x coordinate\code{x1}
#' @param x2 Another x coordinate\code{x2}
#' @param subtree A dendrogram object.\code{subtree}
#' @param center A logical whether the dendrogram is centered.\code{center}
#'
#' @return output A list of parameters.
#'
#' @keywords internal
#'
#' @export cal_node_limit
#' @aliases cal_node_limit
#'
#' @examples
#' #generate sample data
#' set.seed(1234); par(mar=c(0,0,0,0))
#' x <- rnorm(10, mean=rep(1:5, each=2), sd=0.4)
#' y <- rnorm(10, mean=rep(c(1,2), each=5), sd=0.4)
#' dataFrame <- data.frame(x=x, y=y, row.names=c(1:10))
#' #calculate Euclidian distance
#' distxy <- dist(dataFrame)
#' #hierachical clustering "complete" linkage by default
#' hc <- hclust(distxy)
#'
#' total <- cal_total_length(as.dendrogram(hc))
#'

cal_node_limit <- function(x1, x2, subtree, center){
## get the left borders limit[k] of all children k=1..K, and
## the handle point `x' for the edge connecting to the parent.
inner <- !is.leaf(subtree) && x1 != x2
if(inner) {
K <- length(subtree)
mTop <- .memberDend(subtree)
limit <- integer(K)
xx1 <- x1
for(k in 1L:K) {
m <- .memberDend(subtree[[k]])
##if(is.null(m)) m <- 1
xx1 <- xx1 + (if(center) (x2-x1) * m/mTop else m)
limit[k] <- xx1
}
limit <- c(x1, limit)
} else { ## leaf
limit <- c(x1, x2)
}
mid <- attr(subtree, "midpoint")
center <- center || (inner && !is.numeric(mid))
x <- if(center) mean(c(x1,x2)) else x1 + (if(inner) mid else 0)
list(x = x, limit = limit)
}
```

## Try the dendsort package in your browser

Any scripts or data that you put into this service are public.

dendsort documentation built on April 20, 2021, 5:05 p.m.