# 加载Seurat和monocle3包
library(Seurat)
library(monocle3)
# 读取Seurat对象
pbmc <- readRDS("M2output/pbmc_integ.rds")
# 获取counts矩阵
counts <- GetAssayData(object = pbmc, assay = "RNA", slot = "counts")
# 获取细胞元数据和基因元数据
cell.metadata <- pbmc[[]]
feature.metadata <- pbmc[["RNA"]][[]]
# 添加gene_short_name列,表示基因名称
feature.metadata$gene_short_name <- rownames(x = feature.metadata)
# 创建AnnotatedDataFrame对象
pd <- new(Class = "AnnotatedDataFrame", data = cell.metadata)
fd <- new(Class = "AnnotatedDataFrame", data = feature.metadata)
# 创建monocle3的CellDataSet对象
cds <- new_cell_data_set(counts,
cell_metadata = cell.metadata,
gene_metadata = feature.metadata)
# 保存CDS对象
saveRDS(cds, file = "cds_comb.rds")
代码解读
这段代码的主要目标是将 Seurat 对象转换为 monocle3 所需的 CellDataSet
(CDS)格式,并保存该对象。让我们逐行解释这段代码的作用:
4. 获取counts矩阵
counts <- GetAssayData(object = pbmc, assay = "RNA", slot = "counts")
从 pbmc
Seurat 对象中提取 counts
矩阵。这是原始的基因表达数据,通常是一个细胞×基因的矩阵,包含每个细胞中每个基因的表达计数。
5. 获取细胞和基因元数据
cell.metadata <- pbmc[[]]
feature.metadata <- pbmc[["RNA"]][[]]
#head(pbmc[[]])
#A data.frame: 8173 × 8
#orig.ident nCount_RNA nFeature_RNA doublet_filter percent.mt percent.pt integrated_snn_res.0.4 seurat_clusters
#<chr> <dbl> <int> <chr> <dbl> <dbl> <fct> <fct>
#rep1_AAACCCACAAACACCT-1 ricerep1 907 648 Singlet 0.22050717 0.11025358 7 7
#rep1_AAACCCACAACTGTGT-1 ricerep1 1282 741 Singlet 0.15600624 0.00000000 4 4
#rep1_AAACCCACAAGTGGAC-1 ricerep1 676 504 Singlet 0.29585799 0.44378698 1 1
cell.metadata
:从 Seurat 对象pbmc
中提取细胞元数据(即与每个细胞相关的信息,如细胞类型、实验条件等)。feature.metadata
:从pbmc[["RNA"]]
中提取基因元数据(即与每个基因相关的信息,如基因的注释信息)。
6. 添加基因名称列
feature.metadata$gene_short_name <- rownames(x = feature.metadata)
将基因的名称(rownames(feature.metadata)
)作为 feature.metadata
的一列,命名为 gene_short_name
。这对于后续的轨迹分析和可视化非常有用,因为 monocle3
需要基因的名称信息来标识不同的基因。
7. 创建AnnotatedDataFrame对象
pd <- new(Class = "AnnotatedDataFrame", data = cell.metadata)
fd <- new(Class = "AnnotatedDataFrame", data = feature.metadata)
pd
:创建一个AnnotatedDataFrame
对象用于存储细胞元数据(cell.metadata
)。这是monocle3
的标准数据结构,提供了关于细胞的信息。fd
:创建一个AnnotatedDataFrame
对象用于存储基因元数据(feature.metadata
)。- 在R中,
new()
是一个用于创建对象的函数。它通常用于构造S4类的实例(对象)
8. 创建CellDataSet(CDS)对象
cds <- new_cell_data_set(counts,
cell_metadata = cell.metadata,
gene_metadata = feature.metadata)
这行代码使用 new_cell_data_set
创建了一个 CellDataSet
(CDS)对象。CDS 是 monocle3
的核心数据结构,包含了所有的单细胞RNA-seq数据、细胞元数据、基因元数据等信息。这里,counts
作为基因表达数据,cell.metadata
和 feature.metadata
分别作为细胞和基因的元数据被传入。
9. 保存CDS对象
saveRDS(cds, file = "cds_comb.rds")
将创建的 cds
对象保存为 RDS 文件(cds_comb.rds
)。这样,可以在后续的分析中加载此对象,而不需要重新构建。
总结:
这段代码的核心步骤是从 Seurat
对象提取必要的数据,并将其转换为 monocle3
所需的 CellDataSet
格式,以便进行进一步的分析,如轨迹推断等。每一步都处理了不同的数据格式和数据结构,以确保可以顺利进行后续的单细胞分析。
monocle3核心函数
这段代码涉及了几个 monocle3 的核心函数,具体如下:
1. new_cell_data_set
cds <- new_cell_data_set(counts,
cell_metadata = cell.metadata,
gene_metadata = feature.metadata)
-
功能:
new_cell_data_set
是创建CellDataSet
(CDS)对象的核心函数。CellDataSet
是monocle3
中用于存储单细胞数据的主要数据结构,它包含了基因表达数据(counts 矩阵)、细胞元数据(cell.metadata
)、基因元数据(feature.metadata
)等信息。该对象将为后续的轨迹推断、降维分析等提供基础数据结构。 -
输入:
counts
:基因表达计数矩阵。cell_metadata
:细胞的元数据(例如,细胞类型、实验条件等)。gene_metadata
:基因的元数据(例如,基因名称、注释等)。
-
preprocess_cds
:用于对CellDataSet
进行预处理(例如,标准化数据、选择高变基因等)。 -
align_cds
:用于对齐不同样本或细胞群体的CellDataSet
,常见于多样本数据的整合。 -
reduce_dimension
:用于降维,通常是主成分分析(PCA)或者其他降维方法。 -
plot_cells
:用于可视化降维后的细胞群体,通常会使用 UMAP 或 t-SNE 等方法绘制。