多个单细胞样本数据的循环读取

2023-02-16 17:09:44 浏览数 (2)

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

代码语言:javascript复制
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)

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

循环读取

复制代码

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

代码语言:javascript复制
# 加载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
}

分步讲解

加载所有的样本
代码语言:javascript复制
sample_list = c(basename(list.dirs("data/GSE96583/",recursive = F)))

# 创建一个空列表
Object_list = list()

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

代码语言:javascript复制
# 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基础包的函数,主要功能是去掉所有的前缀

代码语言:javascript复制
> basename(list.dirs())
 [1] "."          "data"       "GSE45719"   "GSE96583"   "ctrl"      
 [6] "stim"       "GSM2829942" "GSM3489182" "GSM3972018" "papers"    
[11] "software" 

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

代码语言:javascript复制
> dirname(list.dirs())
 [1] "."               "."               "./data"         
 [4] "./data"          "./data/GSE96583" "./data/GSE96583"
 [7] "./data"          "./data"          "./data"         
[10] "."               "." 
循环加载
代码语言:javascript复制
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列以便后续流程中对数据的拆分和整合等。

代码语言:javascript复制
# 样本信息表添加sample列
  Seurat_object[["sample"]] = sample

以上。

0 人点赞