2015-12-18 20 views
6

Bir filogenetik ağacında bulunan uç etiketleri temelinde bir veri çerçevesinin satırlarını sipariş etmeye çalışıyorum. Ben this question cevabına benzer match işlevini kullanmak için gidiyordu, ancak ben işlevini kullanarak düğümleri yeniden sıraladığınızda ape phylo nesnesinin tip.label özelliği değişmez çünkü ben takılıyorum. tip.label sırası ağacının görsel sunumu yapmasa da değişmediğiniMerdiveni çağırdıktan sonra APE'de ipucu etiketlerinin doğru sırası nasıl alınır

library(ape) 
tree <- read.tree(text = "(((A,B),(C,D)),E);") 
tree2 <- ladderize(tree, right = FALSE) 
tree$tip.label 
#> [1] "A" "B" "C" "D" "E" 
tree2$tip.label 
#> [1] "A" "B" "C" "D" "E" 

dikkat edin. Bu basit örnekte, ladderize işlevinden sonra ağacın görsel sırası E A B C D (çizimden sonra ağaçtan aşağıya doğru okuma) 'dir. Siparişin ağaçtaki düğümlerin yeni sırasını yansıttığı tip.label vektörünün bir kopyasını nasıl alabilirim?

cevap

7

Önemli olan, edge özelliğine bakmaktır. Uçlar her zaman bir tip.label vektöründeki pozisyona karşılık gelen bir ID verilecek ilk düğümlerdir.

:
is_tip <- tree2$edge[,2] <= length(tree2$tip.label) 
#> [1] TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE 

ordered_tips <- tree2$edge[is_tip, 2] 
#> [1] 5 1 2 3 4 

O zaman doğru sırayla ipuçları ayıklamak için bu vektör kullanabilir

:

library(ape) 
tree <- read.tree(text = "(((A,B),(C,D)),E);") 
tree2 <- ladderize(tree, right = FALSE) 
tree$tip.label 
#> [1] "A" "B" "C" "D" "E" 
tree2$tip.label 
#> [1] "A" "B" "C" "D" "E" 
plot(tree2) 
nodelabels() 
tiplabels() 

ilk adım kenarı matrisinin ikinci kolonun iç düğümler üzerinden filtre etmektir

tree2$tip.label[ordered_tips] 
#> [1] "E" "A" "B" "C" "D" 
İlgili konular