S4类是R语言中一种更为严格和复杂的面向对象编程方式。与更简单的S3类相比,S4类提供了更高的灵活性和严格性,适用于需要明确结构的复杂数据和应用场景。
更为详细的介绍:https://www.jianshu.com/p/dd181f0698a7
setClass()
函数来显式定义。类定义中需要明确指定类的名称、包含的槽(属性)以及各个槽的类型。setMethod()
函数定义的。与S3类不同,S4类的方法是基于签名(即输入参数的类型)来选择的,这使得方法的选择更加精准。new()
函数来创建S4类的对象。new()
函数会根据类的定义来检查并创建对象,确保每个槽都满足类定义中的要求。下面是一个简单的S4类定义示例:
# 定义一个名为Person的S4类
setClass(
Class = "Person",
slots = list(
name = "character",
age = "numeric"
)
)
# 定义一个构造方法
setMethod(
"initialize", "Person",
function(.Object, name, age) {
.Object@name <- name
.Object@age <- age
return(.Object)
}
)
# 创建一个Person对象
p <- new("Person", name = "John Doe", age = 30)
# 访问S4对象的槽
p@name
p@age
在这个示例中,Person类有两个槽:name(字符型)和age(数值型)。我们使用setClass()函数定义了这个类,并用new()函数创建了一个Person对象。访问S4对象的槽时,使用@
符号。
Seurat是R语言中一个流行的单细胞RNA测序(scRNA-seq)数据分析工具包,用于从数据预处理到高级分析的多个步骤。Seurat对象是Seurat包中的核心数据结构,用于存储和管理scRNA-seq数据以及与其相关的元数据和分析结果。
Seurat对象是一个S4类对象,专门设计用于单细胞数据的存储和操作。它可以包含多种数据类型,包括原始计数矩阵、标准化数据、PCA结果、t-SNE或UMAP嵌入、细胞分类信息等。
一个典型的Seurat对象包含以下几个主要槽(slots):
RNA
)、标准化数据(data
)、尺度数据(scale.data)等。Seurat对象通常由scRNA-seq数据矩阵创建。创建过程包括数据导入、预处理和对象初始化。以下是一个典型的Seurat对象创建过程示例:
library(Seurat)
# 假设我们有一个表达矩阵 'counts_matrix',行为基因,列为细胞
counts_matrix <- matrix(data = rpois(2000, lambda = 5), nrow = 200, ncol = 10)
# 使用表达矩阵创建一个Seurat对象
seurat_object <- CreateSeuratObject(counts = counts_matrix, project = "ExampleProject")
# 查看Seurat对象的结构
print(seurat_object)
在这个示例中,counts_matrix是一个基因表达矩阵,其中行表示基因,列表示细胞。我们使用CreateSeuratObject()函数将这个矩阵转化为一个Seurat对象。
一般用read10x()等函数直接读取文件创建,不需要自己手动创建对象。
Seurat对象提供了丰富的操作功能,以支持数据分析的不同阶段。常见的操作包括:
在 SeuratObject 5 版本中,一些函数和方法已更新,用于提取和操作 Seurat 对象中的细胞表型数据、特征数据和表达矩阵,基于 SeuratObject 5:
meta.data
: 获取或设置细胞的表型数据。提取表型数据metadata <- seurat_object@meta.data
设置表型数据seurat_object@meta.data <- new_metadata
FetchData()
: 提取指定细胞或基因的特定数据,特别是从 meta.data
中获取特定列的数据。提取特定列的数据data <- FetchData(seurat_object, vars = c("nFeature_RNA", "percent.mt"))
GetAssayData()
: 获取表达数据,使用 layer
参数来指定数据类型,例如 counts
(原始计数数据)或 data
(归一化数据)。获取计数矩阵count_matrix <- GetAssayData(seurat_object, layer = "counts")
获取归一化后的表达数据normalized_data <- GetAssayData(seurat_object, layer = "data")
Idents()
: 获取或设置细胞的分类信息(通常用于提取细胞群体的身份)。获取细胞群体的身份cell_identities <- Idents(seurat_object)
设置细胞群体的身份Idents(seurat_object) <- new_identities
Cells()
: 获取细胞名称或筛选细胞。提取所有细胞名称cell_names <- Cells(seurat_object)
Features()
: 获取特征名称(如基因名称)。提取所有特征名称feature_names <- Features(seurat_object)
AddMetaData()
: 向 Seurat 对象中添加新的表型数据。seurat_object <- AddMetaData(seurat_object, metadata = new_metadata, col.name = "new_metadata")
DefaultAssay()
: 获取或设置当前 Seurat 对象的默认 Assay。default_assay <- DefaultAssay(seurat_object)
DefaultAssay(seurat_object) <- "RNA"
GetDimReduction()
: 提取降维结果(如 PCA、t-SNE、UMAP)的数据。 提取 t-SNE 结果
tsne_data <- GetDimReduction(seurat_object, reduction = "tsne")其他:
VariableFeatures()
:DimPlot()
:绘制降维分析的散点图,如t-SNE或UMAP结果。DimPlot(seurat_object, reduction = "umap")Embeddings()
:提取降维分析的嵌入结果(如PCA、t-SNE、UMAP)umap_coords <- Embeddings(object = seurat_object, reduction = "umap");Reductions()
:获取特定的降维对象。Monocle是一个用于单细胞转录组数据分析的R包,尤其擅长时间序列分析(如拟时分析)和细胞状态的轨迹推断。Monocle对象是Monocle包中的核心数据结构,用于存储单细胞RNA测序(scRNA-seq)数据以及与其相关的元数据和分析结果。
Monocle对象的核心是 CellDataSet
对象,这是一个S4类对象,专门设计用于处理单细胞转录组数据。CellDataSet
对象集成了表达矩阵、样本信息、基因注释和分析结果,能够支持从数据输入到结果输出的整个分析流程。
一个典型的 CellDataSet
对象包含以下主要组件:
meta.data
),如细胞类型、实验条件等。要创建一个Monocle对象,通常需要准备三个主要的数据:基因表达矩阵、细胞元数据(phenoData)、基因注释信息(featureData)。newCellDataSet()函数用于初始化一个 CellDataSet 对象。
通常由seurat对象转换而来:
# 将counts矩阵转换为sparseMatrix
data <- as(as.matrix(scRNAsub@assays$RNA@counts), 'sparseMatrix')
# 将meta数据转换为AnnotatedDataFrame
pd <- new('AnnotatedDataFrame', data = scRNAsub@meta.data)
# 创建基因名表并转换为AnnotatedDataFrame
fData <- data.frame(gene_short_name = row.names(data), row.names = row.names(data))
fd <- new('AnnotatedDataFrame', data = fData)
# 创建CellDataSet对象
mycds <- newCellDataSet(data,
phenoData = pd,
featureData = fd,
expressionFamily = negbinomial.size())
CellDataSet
对象提供了多种函数来进行数据处理和分析,如下是一些常用的操作:
pData()
: 提取样本的表型数据(phenotype data),pheno_data <- pData(mycds)
fData()
: 提取特征数据(feature data),即基因或其他特征的注释信息。feature_data <- fData(mycds)
exprs()
: 提取表达矩阵(expression data),即每个样本在每个特征上的表达量。expression_data <- exprs(mycds)
phenoData()
: 直接获取 phenoData 对象,这与 pData() 类似,但返回的是完整的 AnnotatedDataFrame对象。pheno_data <- phenoData(mycds)
featureData()
: 直接获取 featureData
对象,与 fData()
类似,返回的是 AnnotatedDataFrame
对象。feature_data <- featureData(mycds)
varLabels()
: 获取 phenoData
或 featureData
中的变量标签(即列名)。labels <- varLabels(phenoData(mycds))
sampleNames()
: 获取样本的名称。sample_names <- sampleNames(mycds)
featureNames()
: 获取特征的名称(如基因名)。feature_names <- featureNames(mycds)
其他:
reducedDimA()
:reduced_dimensions <- reducedDimA(cds)
reducedDimA(cds) <- new_reduced_dimensionsreducedDimS()
:获取或设置在 DDRTree
算法中,用于计算轨迹的降维矩阵。
reduced_dimensions_s <- reducedDimS(cds)
reducedDimW()
:
获取或设置在 DDRTree
算法中,用于轨迹推断的权重矩阵。
reduced_dimensions_w <- reducedDimW(cds)cellOrdering()
:
获取细胞在轨迹中的顺序(即拟时信息)。
trajectory_order <- cellOrdering(cds)pseudotime()
:获取或设置细胞的拟时值。
pseudotime_values <- pseudotime(cds)
state()
:获取或设置细胞的状态信息,即细胞在轨迹中的分支状态。
cell_states <- state(cds)
sizeFactors()
:
获取或设置用于归一化的尺寸因子。
size_factors <- sizeFactors(cds)dispFitInfo()
:获取基因表达的离散度信息,用于分析表达数据的分散性。
dispersion_info <- dispFitInfo(cds)
cellPairwiseDistances()
:获取细胞之间的成对距离,通常用于聚类分析。
pairwise_distances <- cellPairwiseDistances(cds)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。