前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多个单细胞样本数据的循环读取

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

作者头像
小汪Waud
发布2023-02-16 17:09:44
1.7K0
发布2023-02-16 17:09:44
举报
文章被收录于专栏:小汪Waud小汪Waud

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

以上。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小汪Waud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 循环读取
    • 复制代码
      • 分步讲解
        • 加载所有的样本
        • 循环加载
        • 添加sample列
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档