R语言完整的Lefse分析
写在前面
怎么说呢,我在之前的推送中,在R语言中实现了LEFse分析过程。但是我没有将数据前处理和结果的物种分类图形做出来。这是一定要在R语言中操作的,要不然,仅仅是实现了lefse算法,也是没有什么作用。
所以这篇贴子主要的工作在于:
使用扩增子注物种注释文件构造Lefse分析输入文件
使用R语言实现Lefse核型计算过程
使用R语言实现物种分类树额绘制,比graphlan更加强大。
全部分析提供原始数据,可重现
注意:
物种注释不同数据库格式不同,如果你的注释文件同参考不同,转化为和示例文件相同的格式,方可进行后续操作。
所需R包
library("tidyverse")
library(microbiomeViz)
library(ggtree)
library(tidyverse)
library(phyloseq)
##--功能函数#---------
# 功能函数
### 提取OTU表格
vegan_otu OTU if(taxa_are_rows(OTU)){
OTU }
return(as(OTU,"matrix"))
}
### 添加OTU注释信息
vegan_tax tax
return(as(tax,"matrix"))
}
整理LEFSE分析的数据
这里如果大家熟悉phyloseq对象,直接用这个phyloseq对象就是了
#导入数据
ps = readRDS("../../data/ps_liu.rds")
如果不熟悉phyloseq可以使用普通数据导入
# 导入otu表格
otu = read.delim("../../data/otutab.txt",row.names = 1)
head(otu)
#导入注释文件
tax = read.delim("../..//data/taxonomy.txt",row.names = 1)
head(tax)
#导入分组文件
map = read.delim("../../data/metadata.tsv",row.names = 1)
head(map)
# head(otu)
otu = as.matrix(otu)
str(otu)
tax = as.matrix(tax)
# taxa_names(tax)
ps sample_data(map) ,
tax_table(tax)
# phy_tree(tree)
)
没有不要用全部OTU,我按照序列数过滤,当然可以不过滤
# otu数量很多,所以选择一部分展示,一般树展示200个作用最为合适
ps = filter_taxa(ps, function(x) sum(x ) > 400 , TRUE)
ps
提取注释文件
这一步是我我们准备Lefse物种注释表格整理的开始。
#-提取otu表和tax表格#--------
otu_table = as.data.frame(t(vegan_otu(ps )))
tax_table = (vegan_tax(ps ))
整理物种注释文件
首先去除未注释出来的物种,这里为:Unassigned。
其次将物种不同级别之间的分隔符号修改为|。
再有将每一级的名称都加上前面级别的全部注释名称,形成结构。
最后按照不同级别数据合并otu表格,然后将注释文件和otu文件合并。
初步整理,去除Unassigned
tax_table[tax_table == "Unassigned"] = NA
tax_table =