可能非常简单,
我有dendrogram
:
set.seed(1)
my_mat <- matrix(rnorm(100),nrow=10,ncol=10)
my_dend <- as.dendrogram(hclust(dist(my_mat)))
我希望使用dendrapply
从height
中的每个attribute
中提取node
my_dend
,因为它遍历dendrogram
in pre-order
dendrapply
。
在my_dend
上试用dendrapply(my_dend, function(n) utils::str(attributes(n)))
example:
pre-order
它不会返回值,但会在height
中打印出我需要的信息。我认为只需返回attribute
dendrapply(my_dend, function(n) attr(n,"height"))
即可:
join
但显然我错了。
有什么想法吗?
答案 0 :(得分:2)
这是你想要的吗?
sapply(hclust(dist(my_mat)), '[')$height
#[1] 2.195193 2.661372 2.837259 2.890944 3.745600 4.098533 4.177088 5.514541 6.496675
#and order
sapply(hclust(dist(my_mat)), '[')$order
# [1] 4 1 10 8 9 2 5 7 3 6
库dendextend_get_branches_heights
dendextend
dendextend_get_branches_heights(my_dend)
#[1] 2.195193 2.661372 2.837259 2.890944 3.745600 4.098533 4.177088 5.514541 6.496675
答案 1 :(得分:1)
要获得树形图中所有节点的高度,可以使用dendextend包中的函数get_nodes_attr
。
library(dendextend)
get_nodes_attr(my_dend, "height")
[1] 6.496675 0.000000 5.514541 3.745600 2.195193 0.000000 0.000000 2.890944
[9] 0.000000 0.000000 4.177088 2.837259 0.000000 0.000000 4.098533 0.000000
[17] 2.661372 0.000000 0.000000
答案 2 :(得分:0)
这远非优雅,但有效:
保存
的输出dendrapply(my_dend, function(n) utils::str(attributes(n)))
到文件,然后编辑该文件:
out.fn <- "dendrogram.output"
capture.output(dendrapply(my_dend, function(n) utils::str(attributes(n))),file=out.fn)
system(paste0("sed -i '/List of/d' ",out.fn))
system(paste0("sed -i '/\\[\\[/d' ",out.fn))
system(paste0("sed -i '/NULL/d' ",out.fn))
system(paste0("sed -i '/^$/d' ",out.fn))
system(paste0("sed -i '/class/d' ",out.fn))
system(paste0("sed -i '/midpoint/d' ",out.fn))
system(paste0("sed -i '/leaf/d' ",out.fn))
system(paste0("sed -i '/label/d' ",out.fn))
system(paste0("sed -i '/members/d' ",out.fn))
system(paste0("sed -i 's/ \\$ //g' ",out.fn))
system(paste0("perl -i -pe 's/height\\s+:\\s+num\\s+//g' ",out.fn))
my_dend.df <- dplyr::filter(read.table(out.fn,header=F,sep=",",stringsAsFactors=F,col.names="depth"),depth != 0)
> my_dend.df
depth
1 6.50
2 5.51
3 3.75
4 2.20
5 2.89
6 4.18
7 2.84
8 4.10
9 2.66