簡體   English   中英

調用 ladderize 函數后如何在 APE 中獲得正確的提示標簽順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM