当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在调用ladderize函数后在APE中获得正确的tip标签顺序》经验,为你挑选了1个好方法。

我正在尝试根据系统发育树中的尖端标签来排序数据帧的行.我要这样做的方法是使用match类似于这个问题的答案的函数,但是我被卡住了因为如果你使用函数重新排序节点tip.label,apephylo对象的属性不会改变ladderize.

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向量的副本,其中顺序反映树中节点的新顺序?



1> cts..:

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

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有