首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >GEO数据提供的rds是一个SingleCellExperiment对象就不会操作了吗?

GEO数据提供的rds是一个SingleCellExperiment对象就不会操作了吗?

作者头像
生信技能树
发布2025-06-09 21:09:29
发布2025-06-09 21:09:29
13000
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

今天遇到生信技能树的一个粉丝求助,他说自己想分析张泽民院士团队的最新文章《Distinct cellular mechanisms underlie chemotherapies and PD-L1 blockade combinations in triple-negative breast cancer》中的数据GSE266919,但是数据提供的rds格式是一个他不知道的对象格式,SingleCellExperiment 对象,如何操作分析呢?下面来看看!

如果你有任何生信疑问,可以看看我们的这两个专辑哦:《生信马拉松答疑》《马拉松授课互动答疑》也欢迎大家图文并茂发邮件:jzhang910@qq.com 或者加微信咨询:Biotree123。

如果你在学习生信的过程中觉得孤军难以奋战,可以报名参加我们每月一起的生信入门课程,最新一期在6月2号开课,跟大家一起成长与学习生信入门&数据挖掘线上直播课6月班

SingleCellExperiment 对象了解

这种对象格式确实现在用得不多,基本上都是 Seurat 或 Scanpy 流派,简单了解一下吧!

SingleCellExperiment 对象来自 R包SingleCellExperiment。

介绍页面:https://bioconductor.org/packages/release/bioc/vignettes/SingleCellExperiment/inst/doc/intro.html

SingleCellExperiment 是 Bioconductor 中用于单细胞基因组学数据存储和操作的核心类。它基于 RangedSummarizedExperiment 类,遵循行表示特征、列表示细胞的约定,并支持存储降维结果和替代特征集数据,广泛应用于单细胞分析软件包(如 scater 和 scran)。

这个对象的结构图示来自早期一个很有名的单细胞教程:https://bioconductor.org/books/3.21/OSCA.intro/the-singlecellexperiment-class.html,不知道现在用这个教程的还多不多呀,OSCA,我早期入门单细胞也是刷了一遍的,有了示意图就非常好理解这个对象的数据结构啦!

软件安装

很简单的安装代码,你肯定可以搞定的:

代码语言:javascript
代码运行次数:0
运行
复制
## 使用西湖大学的 Bioconductor镜像
options(BioC_mirror="https://mirrors.westlake.edu.cn/bioconductor")
options("repos"=c(CRAN="https://mirrors.westlake.edu.cn/CRAN/"))

if (!require("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("SingleCellExperiment")

# 加载测试安装是否成功
library(SingleCellExperiment)

运用技巧

以上面提到的张泽民院士团队的 2025 年 3 月 10 日发表在 Cancer Cell 杂志的最新文章,文献标题为《Distinct cellular mechanisms underlie chemotherapies and PD-L1 blockade combinations in triple-negative breast cancer》中的数据 GSE266919 为例,提供的rds数据就是 SingleCellExperiment 对象,而不是 Seurat对象,来看看怎么取值和操作吧,以及转换为Seurat对象!

数据链接:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE266919

代码语言:javascript
代码运行次数:0
运行
复制
GSE266919_Bcell.rds.gz 277.2 Mb (ftp)(http) RDS
GSE266919_CD4Tcell.rds.gz 425.9 Mb (ftp)(http) RDS
GSE266919_CD8Tcell.rds.gz 346.4 Mb (ftp)(http) RDS
GSE266919_Mm_bulk.counts.xls.gz 6.9 Mb (ftp)(http) XLS
GSE266919_Myeloid.rds.gz 243.5 Mb (ftp)(http) RDS
GSE266919_NKcell.rds.gz 49.0 Mb (ftp)(http) RDS

下载一个代表:https://ftp.ncbi.nlm.nih.gov/geo/series/GSE266nnn/GSE266919/suppl/GSE266919_Myeloid.rds.gz

导入数据

先读取进来,简单探索一番:

代码语言:javascript
代码运行次数:0
运行
复制
###
### Create: Jianming Zeng
### Date:  2023-12-31  
### Email: jmzeng1314@163.com
### Blog: http://www.bio-info-trainee.com/
### Forum:  http://www.biotrainee.com/thread-1376-1-1.html
### CAFS/SUSTC/Eli Lilly/University of Macau
### Update Log: 2023-12-31   First version 
### Update Log: 2024-12-09   by juan zhang (492482942@qq.com)
### 
rm(list=ls())
options(stringsAsFactors = F)
library(ggsci)
library(dplyr) 
library(future)
library(Seurat)
library(clustree)
library(cowplot)
library(data.table)
library(ggplot2)
library(patchwork)
library(stringr)
library(qs)
library(Matrix)

# 创建目录
getwd()
gse <- "GSE266919"
dir.create(gse)

## 导入数据
library(SingleCellExperiment)
sce.all <- readRDS("GSE266919/GSE266919_Myeloid.rds")
sce.all

# 看一下数据的维度,多少个细胞,多少个基因
dim(assay(sce.all))

结构展示如下:

取每个细胞对应的表型

相当于Seurat对象中的metadata信息,使用 colData函数:

代码语言:javascript
代码运行次数:0
运行
复制
# 取每个细胞对应的表型
meta <- colData(sce.all)
class(meta)
meta <- as.data.frame(meta)
head(meta)
table(meta$Sample)
table(meta$Patient)
table(meta$Group)
table(meta$Tissue)
table(meta$Treatment)
table(meta$Efficacy)
table(meta$Response)
table(meta$Subset)
table(meta$SubCluster)
table(meta$Subset, meta$SubCluster)
table(meta$MajorCluster)

我们后面需要其中的巨噬细胞亚群分类,11个巨噬细胞亚群:

取每一行关于基因对应的信息

也是类似,使用 rowData 函数:

代码语言:javascript
代码运行次数:0
运行
复制
# 基因对应的信息
rowdata <- rowData(sce.all)
head(rowdata)

取 count 表达值

使用 counts函数提取:

代码语言:javascript
代码运行次数:0
运行
复制
# 先看看有多少个assay矩阵
assayNames(sce.all)

# 提取counts
cts <- counts(sce.all)
dim(cts)
cts[1:5,1:5]
cts[c("CD3D","CD3E","PTPRC"),1:15]

其他取值,这里知道函数就行,因为这个数据里面没有提供:

代码语言:javascript
代码运行次数:0
运行
复制
# 提取log后的counts
logcts <- logcounts(sce.all)
# 降维坐标
reducedDims(sce.all)
reducedDimNames(sce.all)

转换为Seurat对象

转换非常简单啦,直接新创建一个对象就ok:

代码语言:javascript
代码运行次数:0
运行
复制
## 转出seurat
sce <- CreateSeuratObject(counts = cts, meta.data = meta)
sce

# 查看特征
as.data.frame(sce@assays$RNA$counts[1:10, 1:2])
head(sce@meta.data, 10)
table(sce$orig.ident) 
sce$orig.ident <- sce$Sample

library(qs)
qsave(sce, file="GSE266919/sce.qs")

你学会了吗~

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

本文分享自 生信技能树 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SingleCellExperiment 对象了解
  • 软件安装
  • 运用技巧
  • 导入数据
    • 取每个细胞对应的表型
    • 取每一行关于基因对应的信息
    • 取 count 表达值
  • 转换为Seurat对象
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档