R生物信息学R语言源码

R语言:多文件读取、多目录保存

2020-02-22  本文已影响0人  胡童远

导读

一个丰度表:含每个样品中每个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)
    }
}

\color{green}{😀😀原创文章,码字不易,转载请注明出处😀😀}

上一篇 下一篇

猜你喜欢

热点阅读