R:ape / phylobase:无法将超参数二进制树转换为hclust对象(警告消息)

时间:2010-12-13 16:05:10

标签: r bioinformatics ape-phylo

我使用ape函数和ape包的read.tree函数在R中导入了一个ClustalW2树。我使用chronopl函数估计分子年龄,从而产生超参数二叉树。从中我想在树形图对象中创建R构建。

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

最小工作示例:

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

2 个答案:

答案 0 :(得分:2)

我可以在Linux上使用R 2.12.1 beta(2010-12-07 r53808)下的2.6-2版本重现此版本,但您的代码适用于版本2.5-3的猿。

这表明错误已经悄悄进入包中,您应该通知开发人员问题以寻求专家建议。维护者Emmanuel Paradis的电子邮件地址位于CRAN package for ape

答案 1 :(得分: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对象可以处理它们,但是.hclust.phylo(来自包'ape')由于某种原因不适用于多重树。如果你知道一种将newick文件导入hclust对象的方法,那可能是一种前进的方法 - ade有write.tree()来生成newick文件。