是否有任何R
函数来检索树形图的分支长度:
set.seed(1)
mat <- matrix(rnorm(100*10),nrow=100,ncol=10)
dend <- as.dendrogram(hclust(dist(t(mat))))
以广度优先搜索顺序?
dend
我希望得到这样的结果:
c(16.38688,15.41441,15.99504,14.68365,13.52949,14.39275,12.96921,13.91157,13.15395)
是按bps排序的节点深度(不包括叶子)。
由于
答案 0 :(得分:1)
您可以轻松编写如下代码:
dendro_depth <- function(dendro){
if(!is.null(attributes(dendro)$leaf))
0
else
max(dendro_depth(dendro[[1]]),dendro_depth(dendro[[2]])) +1
}
答案 1 :(得分:1)
数据:
set.seed(1)
mat <- matrix(rnorm(100*10),nrow=100,ncol=10)
dend <- as.dendrogram(hclust(dist(t(mat))))
使用data.tree
包允许以各种顺序遍历树。 level
将提供问题所指明的内容:
require(data.tree)
dend.dt <- as.Node(dend)
sapply(Traverse(dend.dt,traversal = "level", pruneFun = isNotLeaf),function(x) x$plotHeight)
[1] 16.38688 15.41441 15.99504 14.68365 13.52949 14.39275 12.96921 13.91157 13.15395
答案 2 :(得分:1)
请参阅dendextend中的set.seed(1)
mat <- matrix(rnorm(100*10),nrow=100,ncol=10)
dend <- as.dendrogram(hclust(dist(t(mat))))
library(dendextend)
get_branches_heights(dend, sort = F)
。
> get_branches_heights(dend, sort = F)
[1] 16.38688 15.41441 14.68365 15.99504 13.52949
[6] 12.96921 14.39275 13.91157 13.15395
它似乎并不完全按照你想要的顺序,但看看它是否仍然有用:
highlight_branches
BTW,最近github版本的dendextend还带有plot(highlight_branches(dend))
函数,用于根据分支高度对分支进行着色(如果这与你的动机有某种关系):
.siblings()