系统发育树操作神器-TreeTools-持续更新

TreeTools是一个R语言包,专注于系统发育树的创建、修改和分析。它可以指定树的根,根据叶子或节点名称进行root操作,删除指定的叶子或节点,并将树转换为Newick格式。此外,该包还支持从Newick、Nexus和TNT格式导入和导出树,以及分析树的形状和节点支持度。对于生物信息学研究者来说,TreeTools是一个实用的工具,尤其适用于处理非加权树。
摘要由CSDN通过智能技术生成


系统发育树是生物学最常涉及到的内容,有多种软件(MEGA、iQtree、raxML等)以及多种算法(贝叶斯、最大似然法、邻接法等)生成多种格式(newick、nexus、phylip)的系统发育树。我们常常通过iTOL、ggtree进行可视化或者其他操作,这里介绍一个可以批量对树进行编辑、删除操作的R包-TreeTools。

TreeTools能做什么

TreeTools "是一个R软件包,它提供了用于创建、修改和分析系统发育树等多种功能。

主要功能包括:生成具有指定形状的树;分析树的形状;树的根系和提取子树;计算和描述节点支持度;计算祖先-后裔关系;从Newick、Nexus和TNT格式导入和导出树;以及分析进化树分块和clade信息。

它是对’ape’、'phangorn’和’phytools’等软件包的补充,旨在实现高效和稳健的功能,通常应用于非加权树(即那些没有边长的树)。

安装

  • 从CRAN安装并载入包
install.packages('TreeTools')
library('TreeTools')
  • 或可从最新的github下载最新版
if(!require(devtools)) install.packages("devtools") # 借助devtools从github安装最新版包
devtools::install_github('ms609/TreeTools')

常用功能

对系统发育树指定根

RootTree():按照指定叶子(tips)root
RootOnNode():按照内部节点(node)root
UnrootTree():可以折叠一个根节点,而不会出现在预排序的树上使用 ape::unroot() 时遇到的未定义行为
首先需要说明一下什么是tips和node,如下图所示,tips是指的是每个参与建树的最小元素(t1-t8),是树的叶子;node则是指按照树的结构,一个node下有包含多个叶子或者子node(9-15)。

library('ape')
library('TreeTools')

tree <- PectinateTree(8) # 生成梳状的t1-t8叶子的树
tree
plot(tree) # 绘制树
ape::nodelabels() # 添加node lables

在这里插入图片描述

因此,在root的时候可以按照这两种方式来指定。

查看是否是root tree

TreeIsRooted(tree)
[1] TRUE

按照叶子名称指定root

使用RootTree

plot(RootTree(tree, outgroupTips = 't8')) # t8 单个物种作为外支
plot(RootTree(tree, outgroupTips = c('t7', 't8'))) # t7、t8两个物种作为外支
plot(RootTree(tree, outgroupTips = c('t1', 't5', 't8'))) # t1、t5、t8 三个物种作为外支,注意由于这3个tips在原来的树结构中就是外侧,因此指定root后也不会变

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

按照Node名称root

指定t7、t8的祖先节点15作为root,并且不解析根节点,也就是说t8和t7不在合并在一起作为一支。

plot(RootOnNode(tree, node = 15, resolveRoot = F)) # 指定t7、t8的祖先节点15作为root,并且不解析根节点

在这里插入图片描述

指定t7、t8的祖先节点15作为root,并且解析根节点。t7和t8合并到一支再与其他支并列。

plot(RootOnNode(tree, node = 15, resolveRoot = T))# 指定t7、t8的祖先节点15作为root,并且解析根节点

在这里插入图片描述

将root tree保存

使用write.tree保存为newick格式

root.tree <- RootOnNode(tree, node = 15, resolveRoot = T)
write.tree(root.tree, 'root.tree.newick')

# 重新读入root tree
plot(read.tree('root.tree.newick'))

取消root

plot(UnrootTree(tree)) # 取消默认的root
TreeIsRooted(UnrootTree(tree))
[1] FALSE

在这里插入图片描述

按照tip label或者node删除某些树枝

DropTip()将指定的叶子从系统发育树中移除,并将附带的分支折叠起来。

DropTip(tree, tip, preorder = TRUE, check = TRUE)
tree <- BalancedTree(9)
plot(tree) # 9个tips的树
plot(DropTip(tree, c('t5', 't6'))) # 去掉t5和t6两个tips

在这里插入图片描述

  • 去掉t5和t6
    在这里插入图片描述
  • 参数和返回值
# 参数
tree,一个phylo类的树。
tip,指定要删除的树的标签的字符向量,或指定要删除的树的索引的整数向量。指定一个内部节点的索引将删除该节点的所有子节点。
preorder, 逻辑值,指定是否在丢弃提示前对树进行预排序。指定FALSE可以节省一点时间,但是如果树不在预排序中,会导致未定义的行为。
check,逻辑值,指定是否检查提示的有效性。如果是FALSE,并且提示包含的条目与树的叶子不一致,可能会发生未定义的行为。

# 值
DropTip()返回一棵去除所请求的叶子的phylo类树。树的边缘将被按顺序编号,但其顺序可能不符合Preorder()的惯例。KeepTip() 返回所有不在树尖上的叶子都被移除的树,按预排序。
  • 按照node删除树结构
plot(tree)
nodelabels() # 显示node number
plot(DropTip(tree, tip = 14)) # 去掉node 14,t4-t5

在这里插入图片描述
在这里插入图片描述

转换成newick文本格式

通过NewickTree将一棵树编码为一个Newick格式的字符串。这与write.tree()的不同之处在于将空格编码为空格,而不是下划线。

plot(tree)
NewickTree(tree)
[1] "((((t1,t2),t3),(t4,t5)),((t6,t7),(t8,t9)));"
NewickTree(DropTip(tree, 't9'))
[1] "((((t1,t2),t3),(t4,t5)),((t6,t7),t8));"
NewickTree(RootTree(tree, 't9'))
[1] "((((((t1,t2),t3),(t4,t5)),(t6,t7)),t8),t9);"

TreeTools全部函数

参见TreeTools全部函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值