上一期我们介绍了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
以上。