我想:
- 删除一个子树,然后将一个新的子树合并到原始树状图中,使其与被删除的位置相同。
- 或用另一个子树替换子树。
我知道merge()
可以合并顶部的两个树状图。它是否也在指定节点合并它。如果有怎么办?如果没有,是否有另一种方法可以做到这一点?
我知道cut()
将树状图切割成一定高度或特定数量的节点。但是如何让它只删除一个特定的子树呢?
子树的规范将是其中第一个节点的属性。例如attr(n,"attribute")== something
,可以通过dendrapply()
.
这是如何制作树状图的示例代码。
library("stats")
library("fastcluster")
x=matrix(c(1:20),ncol=4)
y=matrix(c(21:40),ncol=4)
#creating hclusters
xcl=hclust.vector(x)
ycl=hclust.vector(y)
#converting to dendrograms
xdend=as.dendrogram(xcl)
ydend=as.dendrogram(ycl)
# merging two dendrograms at the top
zdend=merge(xdend,ydend)
- 注意:我发现了如何通过以下方式替换子树。
merging <- function(n,subtree){
if (attr(n,"members")==2){
treeMerged2<<- merge(n,subtree)}}
D=rbind(
+ c(1,1,1,1,1),
+ c(1,2,1,1,1),
+ c(2,2,2,2,2),
+ c(2,2,2,2,1),
+ c(3,3,3,3,3),
+ c(3,3,3,3,2))
Ddend=as.dendrogram(hclust.vector(D))
tr=dendrapply(Ddend,merging, xdend)
问题:
1) 它替换了它的姊妹子树而不是期望的那个。
2)原始树没有改变。
3)创建的新树“treeMerged2”只有添加的子树和姐妹子树,没有树的其余部分。
问题:
- 如何使输出成为其中包含新子树的原始树?
谢谢。