R中的系统发育:折叠内部节点的后代提示

时间:2016-07-25 14:11:49

标签: r nodes phylogeny

我有几千个基因树,我正准备用codeml进行分析。下面的树是一个典型的例子。我想要做的是自动折叠似乎重复的提示或节点。例如,节点56的后代是尖端26,27,28等一直到36个。现在除了尖端26之外的所有这些看起来都是重复的。如何将它们全部折叠成一个提示,只留下提示28和其他提示的一个代表作为节点56的后代?

我知道如何逐个手动执行此操作,但我尝试自动执行此过程,以便函数可以识别需要折叠的提示,然后将它们减少为单个代表提示。到目前为止,我一直在研究计算尖端之间距离的共生函数。但是,我不确定如何使用该信息来折叠提示。

以下是树的newick字符串:

((((11:0.00201426,12:5e-08,(9:1e-08,10:1e-08,8:1e-08)40:0.00403036)41:0.00099978,7:5e-08)42:0.01717066,(3:0.00191517,(4:0.00196859,(5:1e-08,6:1e-08)71:0.00205168)70:0.00112995)69:0.01796015)43:0.042592645,((1:0.00136179,2:0.00267375)44:0.05586907,(((13:0.00093161,14:0.00532243)47:0.01252989,((15:1e-08,16:1e-08)49:0.00123243,(17:0.00272478,(18:0.00085725,19:0.00113572)51:0.01307761)50:0.00847373)48:0.01103656)46:0.00843782,((20:0.0020268,(21:0.00099593,22:1e-08)54:0.00099081)53:0.00297097,(23:0.00200672,(25:1e-08,(36:1e-08,37:1e-08,35:1e-08,34:1e-08,33:1e-08,32:1e-08,31:1e-08,30:1e-08,29:1e-08,28:0.00099682,27:1e-08,26:1e-08)58:0.00200056,24:1e-08)56:0.00100953)55:0.00210137)52:0.01233888)45:0.01906982)73:0.003562205)38;

enter image description here

1 个答案:

答案 0 :(得分:2)

一种选择是删除长度低于阈值的提示。

drop_dupes <- function(tree,thres=1e-5){
  tips <- which(tree$edge[,2] %in% 1:Ntip(tree))
  toDrop <- tree$edge.length[tips] < thres
  drop.tip(tree,tree$tip.label[toDrop])
}

plot(drop_dupes(tree))

enter image description here