我有一个距离矩阵,227列227行称为
"X9_resid_matrix"
这个矩阵代表了227种蛋白质,并告诉我每种蛋白质之间的差异。因此,在右上角有一个零,因为1,1代表相同的蛋白质,因此它们相同或零不同。数字范围从0到9。
然后我使用以下命令制作树形图:
"plot(hclust(as.dist(X9_resid_matrix)))"
y轴的范围从0到9。
我希望计算机只告诉我低于某个截止点的集群。
意思是如果只有31个距离为零的集群,我想要一个计算机用来告诉我31个零距离集群的代码。
命令:
cutree(hc, h=0)
当我运行它时,似乎没有这样做。
例如: 我有以下树形图: Click here to view
我想要一个在高度为1时剪切树形图的命令,只显示1和2.
答案 0 :(得分:0)
我认为您正在寻找的函数是cut
,它采用树状图对象x
并将其切割为高度h
以生成一个双元素列表。第一个元素“upper”是修剪后的原始树,第二个元素“lower”是包含修剪分支的列表(有关详细信息,请参阅?dendrogram
)。
“下”元素中的每个分支本身都是树形图,并且可以照常绘制和操作。这是一个小例子:
newick <- "((Human:0.01,Chimp:0.03):0.02,(((Whale:0.04,Cow:0.01):0.01,Pig:0.01):0.01,(Dog:0.01,Cat:0.01):0.01):0.04);"
install.packages("phylogram")
dendro <- phylogram::read.dendrogram(text = newick)
plot(dendro)
然后可以使用cut
命令对树形图对象进行横截面处理:
obj <- cut(dendro, h = 0.09)
obj
这将输出如下所示的列表:
$upper
'dendrogram' with 2 branches and 2 members total, at height 0.1
$lower
$lower[[1]]
'dendrogram' with 2 branches and 2 members total, at height 0.08
$lower[[2]]
'dendrogram' with 2 branches and 5 members total, at height 0.06
请注意,第二个元素obj$lower
包含两个子树,这些子树是在0.09高度切割原始树时产生的。要提取和绘制说这些子树中的第二个只使用标准列表子集化语法:
subtree <- obj$lower[[2]]
plot(subtree)
要将hc对象转换为树形图,您可以使用as.dendrogram
函数。