如何在调用ladderize函数后在APE中获得正确的tip标签顺序

时间:2015-12-18 22:06:23

标签: r phylogeny

我试图根据系统发育树中的尖端标签来排序数据帧的行。我要这样做的方法是使用与this question的答案类似的match函数,但是我被卡住会导致tip.label ape属性如果使用ladderize函数重新排序节点,则phylo对象不会更改。

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函数之后的树的视觉顺序是E A B C D(在绘图后从树的底部到顶部读取)。如何获取tip.label向量的副本,其中顺序反映了树中节点的新顺序?

2 个答案:

答案 0 :(得分:10)

关键是看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"

答案 1 :(得分:0)

对于不同的包(ggtree),但我引用相同的问题:“要获取ggtree图的提示顺序,请执行以下操作:data(bird.orders) p <- ggtree::ggtree(bird.orders) p[["data"]]#提取'label'和'y'列

来自此网站,并包装...尽管更换灯泡需要多少R包装? https://rdrr.io/github/joelnitta/jntools/man/get_tips_in_ape_plot_order.html