2016-07-25 56 views
2

的後裔提示我有一個我試圖準備與codeml分析幾千個基因樹木。下面的樹是一個典型的例子。我想要做的是自動化顯示爲重複的提示或節點的崩潰。舉例來說,節點56的後代是尖端26,27,28等一路36.現在,所有比尖端26這些其它的出現是重複的。我如何可以摺疊他們都到一個單一的小費,只留下提示28和一個代表其他提示爲節點56的後裔?系統發育中R:倒塌的內部節點

我知道如何手動一個做到這一點的,但我想這個過程自動化,這樣的功能可以識別哪些技巧需要摺疊,然後將其降低到一個代表尖端。到目前爲止,我一直在研究計算尖端之間距離的複合函數。但是,我不確定如何使用該信息來摺疊提示。

這裏是下面的樹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.0,(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.)45:0.01906982)73:0.003562205)38; 

enter image description here

+0

什麼是確定的節點是重複你的標準是什麼?這只是提示之間的距離嗎?如果是這樣,那麼門檻是多少?此外,它會更容易爲其他人幫助,如果你能提供此樹newick字符串。 –

+0

嗨,是的,這是提示之間的距離。我正在使用的閾值是1e-05,儘管現在這只是任意的。 – spiral01

回答

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

+0

啊ofcourse,使用edge.length!非常感謝你這正是我正在尋找的! – spiral01