我想使用基于网络的交互式生命之树工具(iTOL)制作一棵树(集群)。作为输入文件(或字符串),此工具使用Newick 格式,这是一种使用括号和逗号表示具有边长的图论树的方法。除此之外,可能还支持其他信息,例如集群节点的引导值。
例如,在这里我使用包创建了用于聚类分析的数据集:clusterGeneration
library(clusterGeneration)
set.seed(1)
tmp1 <- genRandomClust(numClust=3, sepVal=0.3, numNonNoisy=5,
numNoisy=3, numOutlier=5, numReplicate=2, fileName="chk1")
data <- tmp1$datList[[2]]
之后,我执行了集群分析,并使用包通过引导程序评估了对集群节点的支持:pvclust
set.seed(2)
y <- pvclust(data=data,method.hclust="average",method.dist="correlation",nboot=100)
plot(y)
这是集群和引导值:
为了制作 Newick 文件,我使用了ape
包:
library(ape)
yy<-as.phylo(y$hclust)
write.tree(yy,digits=2)
write.tree
函数将以 Newick 格式打印树:
((x2:0.45,x6:0.45):0.043,((x7:0.26,(x4:0.14,(x1:0.14,x3:0.14):0.0064):0.12):0.22,(x5:0.28,x8:0.28 ):0.2):0.011);
这些数字代表分支长度(集群的边缘长度)。按照iTOL 帮助页面(“上传和使用您自己的树”部分)的说明,我将引导值手动添加到我的 Newick 文件中(下面的粗体值):
((x2:0.45,x6:0.45) 74 :0.043,((x7:0.26,(x4:0.14,(x1:0.14,x3:0.14) 55 :0.0064) 68 :0.12) 100 :0.22,(x5:0.28 ,x8:0.28) 100 :0.2) 63 :0.011);
当我将字符串上传到 iTOL 时,它工作正常。但是,我有一个巨大的集群,手工操作似乎很乏味......
问题:什么是可以执行它而不是手动输入的代码?
引导值可以通过以下方式获得:
(round(y$edges,2)*100)[,1:2]
用于形成 Newick 文件的分支长度可以通过以下方式获得:
yy$edge.length
write.tree
我试图在调试后弄清楚函数是如何工作的。但是,我注意到它在内部调用函数.write.tree2
,我无法理解如何有效地更改原始代码并在 Newick 文件中的适当位置获取引导值。
欢迎任何建议。