如何在R中将树转换为树状图?

5
我应该如何将Java程序输出的树转换为R中的树状图?
目前,我正在使用这里提供的建议将树转换为Newick格式。然后我使用R中的ape包读取Newick格式的树。请注意保留HTML标签。
library("ape")
cPhylo <- read.tree(file = "gc.tree")

最后,我使用R中的as.hclust将树转换为树状图:
dendrogram <- as.hclust(gcPhylo)

然而,树状图需要分支长度。虽然我插入了分支长度,但是出现了错误,提示树不是超度量的:

Error in as.hclust.phylo(gcPhylo) : the tree is not ultrametric

我想我在插入分支长度时做错了什么。
还有其他方法可以遵循吗?或者在将树转换为Newick格式时如何插入分支长度?等长分支长度也可以。

请查看 ?as.hclust 的帮助文档 - 它只能将 twins 类型的对象转换为 hclust 类型。因此,你的代码肯定无法运行。至于如何让它工作,很抱歉我一点头绪也没有。 - Andrie
那么,这意味着与分支长度无关。因此,不能使用as.hclust进行转换。那么我需要找另一种方法。 - Burcu
3个回答

8

这是一个老问题,但迄今为止答案不足。由于我遇到了同样的问题,而且我的谷歌搜索无法找到答案,所以在这里提供给您:

library("ape")
cPhylo <- read.tree(file = "gc.tree")
dendrogram <- chronos(cPhylo)

6
这是一个旧问题,但之前的回答都要求在将树转换为树状图对象之前使其成为超度量树。您可以使用DECIPHER包从Newick格式文件中读取树状图对象:
dend <- ReadDendrogram(path_to_newick_file)

2

我认为问题实际上在于您的"gc.tree"不是超度量的。确保从根到每个末端的距离相同。以下代码可行:

library('ape')
tree <- read.tree(text='(((A:4.2,B:4.2):3.1,C:7.3):6.3,D:13.6);')
is.ultrametric(tree)
is.binary.tree(tree)
is.rooted(tree)
hc <- as.hclust.phylo(tree)

但要使树非超度量的(请注意D的分支长度):
tree <- read.tree(text='(((A:4.2,B:4.2):3.1,C:7.3):6.3,D:15);')

如果使用as.hclust.phylo,将会出现错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接