繁体   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