导读
一个丰度表:含每个样品中每个bin的丰度。
多个基因表:每个bin的基因list。
需求:计算每个样品中每个bin中的基因丰度。
一、读取丰度表
# 获取bin(样品)丰度的文件
abun=read.table("Bin_all/Bin_quant/bin_abundance_table.txt", header=T, sep="\t")
二、读取bin基因表
list.files:定位所需文件
strsplit(files[i], split=".gene.txt"):切割字符串
ml[[i]]=read.table():列表存放数据框
# 获取bin文件名
setwd("Bin_all/Bin_prokka/prokka_out_table")
files=list.files(pattern="bin.*.gene.txt") # 读取所有文件的全名,含后缀
name=vector()
for(i in 1:length(files))
{
name[i]=as.character(strsplit(files[i], split=".gene.txt")) # 批量提取文件名
}
ml=list() # 创建一个新列表,存放每个数据框的数据
for(i in 1:length(files))
{
ml[[i]]=read.table(files[i], sep="\t", na.string="", stringsAsFactors=F, header=T, quote="", comment.char="") # 读取所有数据框
}
三、创建结果文件夹
dir.create():创建文件夹
# 创建结果文件夹
fold=colnames(abun)
for(i in 2:length(fold))
{
dir.create(fold[i])
}
四、计算每个样品中每个基因的丰度、保存到相应的文件夹
write.table(file, file=file.path(route, name)):向量作为路径
# 计算每个样品中每个Bin中每个基因的丰度
rownames(abun)=abun[,1]
for(i in 2:length(fold)) # 样品
{
for(j in 1:length(name)) # Bin
{
# 计算基因丰度
result=data.frame()
abun_gene=vector()
abun_gene=ml[[j]]$number*abun[name[j], fold[i]]
result=data.frame(ml[[j]], abun_gene)
write.table(result, file=file.path(fold[i], name[j]), sep="\t", quote=F, row.names=F)
}
}
网友评论