4

我已经使用 ape 函数和read.treeape 包的函数在 R 中导入了 ClustalW2 树。我使用 chronopl 函数估计分子年龄,得到一个超测量的二叉树。我想从中创建一个 R build in dendrogram 对象。

树的情节很好,是一个真正的phylo对象。但是我在尝试转换它时遇到了问题:

最小的工作示例:

require(ape)
test.tree <- read.tree(file = "testree.phylip", text = NULL, tree.names = NULL, skip = 0,
    comment.char = "#", keep.multi = FALSE)

test.tree.nu <- chronopl(test.tree, 0, age.min = 1, age.max = NULL,
node = "root", S = 1, tol = 1e-8,
CV = FALSE, eval.max = 500, iter.max = 500)

is.ultrametric(test.tree.nu)
is.binary.tree(test.tree.nu)
treeclust <- as.hclust.phylo(test.tree.nu)

生成的树“看起来”很好,我测试以确保树不是超度量和二元的,并希望将其转换为 hclust 对象,最终使其成为树状图对象。

> is.binary.tree(test.tree.nu)
[1] TRUE
> is.ultrametric(test.tree.nu)
[1] TRUE

尝试从树中创建 hclust 对象后,出现错误:

> tree.phylo <- as.hclust.phylo(test.tree.nu)
Error in if (tmp <= n) -tmp else nm[tmp] : 
  missing value where TRUE/FALSE needed
In addition: Warning message:
In nm[inode] <- 1:N :
  number of items to replace is not a multiple of replacement length

我意识到这是一个非常详细的问题,也许这些与某些软件包特别相关的问题最好在其他地方提出,但我希望有人能够帮助我。

非常感谢所有帮助,

问候,

文件下载

Phylip 文件可以在这里下载 http://www.box.net/shared/rnbdk973ja

4

2 回答 2

2

我可以在 Linux 上的 R 2.12.1 beta (2010-12-07 r53808) 下使用 2.6-2 版 ape 重现这一点,但您的代码在 2.5-3 版 ape 中工作。

这表明程序包中出现了错误,您应该将问题告知开发人员以寻求专家建议。维护者 Emmanuel Paradis 的电子邮件地址在 Ape 的CRAN 包中

于 2010-12-13T16:39:58.660 回答
2

看起来问题在于 chronopl 返回的树要么是无根的,要么有一个多分支的根(取决于它的解释方式)。此外 as.hclust.phylo 有/有无用的错误消息。

这:

modded.tree <- drop.tip(test.tree.nu,c(
'An16g06590','An02g12505','An11g00390','An14g01130'))

从根部下降的三个进化枝之一中删除所有尖端,因此

is.ultrametric(modded.tree)
is.binary.tree(modded.tree)
is.rooted(modded.tree)

全部返回 TRUE,你可以做

treeclust <- as.hclust.phylo(modded.tree)

. 尽管我认为您确实想要一个表示多分支树的 hclust 对象,并且尽管 hclust 对象可以处理这些对象,但 as.hclust.phylo(来自包“ape”)由于某种原因不适用于多分支。如果您知道将 newick 文件导入 hclust 对象的方法,那可能是一种前进的方式 - ade 具有 write.tree() 来生成 newick 文件。

于 2011-11-20T21:15:05.890 回答