[英]How to get correct order of tip labels in APE after calling ladderize function
我正在嘗試根據系統發育樹中的提示標簽對數據框的行進行排序。 我打算這樣做的方法是使用類似於這個問題的答案的match
函數,但是我卡住了,因為如果你使用ladderize
重新排序節點, ape
phylo 對象的tip.label
屬性不會改變功能。
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"
注意tip.label
的順序沒有改變,即使樹的視覺表示發生了改變。 在這個簡單的例子中,在ladderize
函數之后樹的視覺順序是EABCD
(繪制后在樹上從下到上閱讀)。 如何獲取tip.label
向量的副本,其中的順序反映了樹中節點的新順序?
看來關鍵是看edge
屬性。 提示總是第一個被賦予 ID 的節點,它將簡單地對應於tip.label
向量中的位置。
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()
第一步是從邊緣矩陣的第二列中過濾掉內部節點:
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
然后你可以使用這個向量以正確的順序提取提示:
tree2$tip.label[ordered_tips]
#> [1] "E" "A" "B" "C" "D"
我正在嘗試根據系統樹中的提示標簽對數據框的行進行排序。 我要執行此操作的方法是使用match
該問題的答案類似的match
函數,但是我卡住了,這是因為如果使用ladderize
對節點重新排序,則ape
門對象的tip.label
屬性不會改變功能。
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"
請注意,即使樹的視覺表示發生了變化, tip.label
的順序也沒有改變。 在這個簡單的示例中, ladderize
函數之后的樹的視覺順序為EABCD
(繪制后從樹的底部到頂部讀取)。 我如何獲得tip.label
向量的副本,其中的順序反映了樹中節點的新順序?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.