前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OTU/ASV和系统发育树不匹配的一个解决方案

OTU/ASV和系统发育树不匹配的一个解决方案

作者头像
Listenlii-生物信息知识分享
发布2023-09-06 10:02:27
1.4K2
发布2023-09-06 10:02:27
举报
文章被收录于专栏:Listenlii的生物信息笔记

最近好几个人遇到了同样的问题,就是在将OTU/ASV和系统发育树对齐的时候,报错:

代码语言:javascript
复制
Warning message:
In drop.tip(phylo, trimTaxa) : drop all tips of the tree: returning NULL

意思是OTU/ASV名字和系统发育树的节点全都不匹配,导致树上的节点全都被去掉了,树就变成了NULL。

这种问题的出现基本上都是进化树导致的。需要仔细查看进化树文件是否正确。在R中读入进化树:

代码语言:javascript
复制
library("ape")
tree = read.tree("tree.nwk")
tree

查看一下树,正确的格式应该是这样的:

但是,如果你的数据是某公司分析的,他们返回的树文件可能是这样的:

OTU/ASV名字多了单引号。而单引号也会被当成树节点的一部分,因此就和OTU/ASV不一致,导致全不匹配。。。

解决的办法也很简单,把树节点单引号替换掉即可:

代码语言:javascript
复制
tree$tip.label = gsub("'","",tree$tip.label)

完整的代码如下:

代码语言:javascript
复制
# 读入树和OTU
tree = read.tree("Tree.nwk")
otu = read.table("otu.tabular", header=T, row.names=1, sep="\t")

# 如果树的节点存在单引号
tree$tip.label = gsub("'","",tree$tip.label)

# 查看树是否有根
is.rooted(tree)

# 如果是FALSE,说明没有根,需要构建有根树
tree2 = root(tree, 1, r=TRUE) # pick the the farthest OTU as 
is.rooted(tree2)  ##true

# 修剪树和OTU
#prune.sample 对树进行修剪,仅包含otu中出现的物种。
#注意OTU表需转至,变成列为OTU/ASV,行为样本
phy.tree = prune.sample(t(otu), tree2) 

#match.phylo.otu 对OTU表进行删减,只保留树中包含的OTU。
match.otu <- match.phylo.comm(phy.tree,t(otu)) 

# 得到匹配的树和OTU
otu = match.otu$comm  # 注意得到的是转至过的OTU
phy = match.otu$phy

# 输出树
write.tree(phy,file = "tree.new.nwk")
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Listenlii 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档