美文网首页R生物信息学R语言源码
R语言:多文件读取、多目录保存

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

作者: 胡童远 | 来源:发表于2020-02-22 18:30 被阅读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}{😀😀原创文章,码字不易,转载请注明出处😀😀}

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/wptrqhtx.html