美文网首页
多个样本数据的循环读取

多个样本数据的循环读取

作者: 小汪Waud | 来源:发表于2022-02-22 22:30 被阅读0次

    上一期我们介绍了Seurat对象的构建方法,对于少数样本的数据时,我们可以采取将读取代码复制多遍以运行,如下所示。

    library("Seurat")
    scrna_data_ctrl <- Read10X("data/GSE96583/ctrl/")
    ctrl <- CreateSeuratObject(
      counts = scrna_data_ctrl,
      min.cells = 3,
      min.features = 200
    )
    
    scrna_data_stim <- Read10X("data/GSE96583/stim/")
    stim <- CreateSeuratObject(
      counts = scrna_data_stim,
      min.cells = 3,
      min.features = 200
    )
    # 将两个样本合并到一个list
    Seurat_object_list <-list(ctrl = ctrl,stim = stim)
    

    一旦样本量多起来,我们就需要更加高效的方式来读取数据。因此本期给大家介绍一下循环读取多个样本数据的方法~

    循环读取

    复制代码

    我先放上代码,方便大家复制修改。

    # 加载stringr包
    library(stringr)
    
    # 加载所有的样本
    sample_list = c(basename(list.dirs("data/GSE96583/",recursive = F)))
    Object_list = list()
    
    # 循环加载
    for (sample in sample_list){
      filedir = str_c("data/GSE96583/",sample)
      scrna_data <- Read10X(filedir)
      Seurat_object <- CreateSeuratObject(
        counts = scrna_data,
        min.cells = 3,
        min.features = 200)
        
    # 样本信息表添加sample列
      Seurat_object[["sample"]] = sample
      
    # 将Seurat对象放到之前创建好的空list中
      Object_list[[sample]] = Seurat_object
    }
    

    分步讲解

    加载所有的样本

    sample_list = c(basename(list.dirs("data/GSE96583/",recursive = F)))
    
    # 创建一个空列表
    Object_list = list()
    

    list.dirs()作为R基础包的函数,主要功能是查看当前目录的子目录

    # recursive参数决定了是否递归
    list.dirs(path = ".", full.names = TRUE, recursive = TRUE)
    
    > list.dirs()
     [1] "."                    "./data"               "./data/GSE45719"      "./data/GSE96583"      "./data/GSE96583/ctrl" "./data/GSE96583/stim"
     [7] "./data/GSM2829942"    "./data/GSM3489182"    "./data/GSM3972018"    "./papers"             "./software"    
    

    basename()同样是R基础包的函数,主要功能是去掉所有的前缀

    > basename(list.dirs())
     [1] "."          "data"       "GSE45719"   "GSE96583"   "ctrl"      
     [6] "stim"       "GSM2829942" "GSM3489182" "GSM3972018" "papers"    
    [11] "software" 
    

    类似的还有dirname(),去掉所有的后缀。

    > dirname(list.dirs())
     [1] "."               "."               "./data"         
     [4] "./data"          "./data/GSE96583" "./data/GSE96583"
     [7] "./data"          "./data"          "./data"         
    [10] "."               "." 
    

    循环加载

    for (sample in sample_list){
    # 路径的获取
      filedir = str_c("data/GSE96583/",sample)
    # 数据的读取
      scrna_data <- Read10X(filedir)
    # 对象的构建
      Seurat_object <- CreateSeuratObject(
        counts = scrna_data,
        min.cells = 3,
        min.features = 200)
    

    str_c是stringr中的函数,主要功能是将多个字符型向量合并成一个字符型向量,这里指将"data/GSE96583/"这个路径与sample_list中的每一个元素进行合并,依次读取并构建Seurat对象。

    添加sample列

    在样本信息表中添加sample列有利于后续流程对数据的拆分和整合等。

    # 样本信息表添加sample列
      Seurat_object[["sample"]] = sample
    

    相关文章

      网友评论

          本文标题:多个样本数据的循环读取

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