2016-07-25 16 views
2

Ich habe mehrere tausend Genbäume, die ich für die Analyse mit CodeMel bereit bin. Der folgende Baum ist ein typisches Beispiel. Ich möchte das Zusammenklappen von Spitzen oder Knoten, die Duplikate zu sein scheinen, automatisieren. Zum Beispiel sind die Nachkommen des Knotens 56 die Spitzen 26, 27, 28 usw. bis 36. Nun scheinen alle anderen als die Spitze 26 Duplikate zu sein. Wie kann ich sie alle zu einem einzigen Tipp zusammenfassen, so dass nur die Tipps 28 und ein Vertreter der anderen Tipps als Nachfolger des Knotens 56 übrig bleiben?Phylogenetics in R: kollabierende Nachkommen eines internen Knotens

Ich weiß, wie man manuell eins nach dem anderen macht, aber ich versuche, den Prozess zu automatisieren, so dass eine Funktion identifizieren kann, welche Tipps reduziert werden müssen, und sie dann auf einen einzigen repräsentativen Tipp reduzieren. Bisher habe ich mir die kopfenetische Funktion angeschaut, die die Abstände zwischen den Spitzen berechnet. Ich bin mir jedoch nicht sicher, wie ich diese Informationen verwenden kann, um Tipps zu minimieren.

Hier ist die Newick Zeichenfolge für die unter Baum:

((((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

Was sind Ihre Kriterien für die Bestimmung, ob Knoten Duplikate sind? Ist es nur Abstand zwischen den Spitzen? Wenn ja, wo ist die Schwelle? Außerdem können andere Personen leichter helfen, wenn Sie die newick-Zeichenfolge für diesen Baum bereitstellen können. –

+0

Hallo, ja, es ist der Abstand zwischen den Spitzen. Die Schwelle, mit der ich arbeite, ist 1e-05, obwohl das momentan einfach willkürlich ist. – spiral01

Antwort

2

Eine Möglichkeit ist, Tipps zu löschen, die eine Länge unterhalb der Schwelle haben.

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

Ah natürlich, mit edge.length! Vielen Dank, das ist genau das, wonach ich gesucht habe! – spiral01