内容

1安装

如果(!requireNamespace("BiocManager", quiet =TRUE)){install.packages("BiocManager")} BiocManager::install(" experiment子集")

要从Github安装最新版本,请使用以下代码:

库(devtools) install_github(“campbio / ExperimentSubset”)

装载包:

库(ExperimentSubset)

2动机

实验对象,如SummarizedExperimentSingleCellExperiment是一个或多个类似矩阵的分析以及相关的行和列数据的数据容器。下游分析通常只需要原始数据的一个子集。例如,过滤出质量差的样品需要在分析之前排除一些列。的ExperimentSubsetObject是一个容器,可以有效地管理相同数据的不同子集,而不必为每个新子集创建单独的对象,并且可以用作其他实验类的临时替代品。

3.简介

ExperimentSubset包允许用户对来自同一实验的单细胞数据进行灵活的子集设置,以及随后将这些子集存储回同一对象。一般来说,它为用户提供了与SingleCellExperiment容器是单单元数据使用最广泛的容器之一。然而,除了提供的功能SingleCellExperiment容器,ExperimentSubset提供子功能,同时对用户隐藏实现细节。它通过创建对子集的引用来实现这一点而且而不是尽可能地存储一个新的分析,而不是实际复制冗余数据。函数从SingleCellExperiment分析rowData而且colData可以用于常规分析,就像人们通常做的那样,以及与新创建的数据子集。这允许用户使用ExperimentSubset容器简单,就好像他们在使用SingleCellExperiment不需要对现有代码进行更改的容器。

4概述ExperimentSubset

ExperimentSubset包由多个类组成,根据输入实验对象的类支持子集管理功能。当前支持的可以使用的实验类ExperimentSubset包括SummarizedExperimentRangedSummarizedExperiment而且SingleCellExperiment

ExperimentSubset包添加了一个额外的插槽子集赋给这些类中的对象,从而支持数据子集的创建和管理。

中的每个子集ExperimentSubset对象(更具体地说,是在子集对象的槽位)存储为AssaySubset实例。这AssaySubset实例针对父对象(可以是继承的父对象或另一个子集)创建对这个特定子集的行索引和列索引的引用。如果要针对子集存储新的分析,则将其存储为子集内的单独实验对象(与继承对象相同的类)。

5核心方法ExperimentSubset

而所有的方法都可用SummarizedExperiment而且SingleCellExperiment类已被重写以支持ExperimentSubset类提供了对子集的额外支持,则为创建和操作子集提供了一些核心方法ExperimentSubset类。

5.1ExperimentSubset构造函数

构造函数方法允许创建ExperimentSubset对象,只要它继承自输入实验对象SummarizedExperiment类。类的命名列表可以直接从构造函数中创建子集子集参数。

counts <- matrix(rpois(100, lambda =10), ncol=10, nrow=10) sce <- singlecel实验(list(counts = counts)) es <- experiment子集(sce) es
##类:SubsetSingleCellExperiment ## dim: 10 10 ##元数据(0):## assays(1):计数## rownames: NULL ## rowData names(0): ## colnames: NULL ## colData names(0): ## reducedDimNames(0): ## mainExpName: NULL ## altExpNames(0): ## subsets(0): ## subsetAssays(0):

此外,一个ExperimentSubset对象也可以直接从通常加载的数据(如计数矩阵)创建,这些数据可以传递给列表中的构造函数。

-矩阵(rpois(100, lambda =10), ncol=10, nrow=10)
##类:SubsetSingleCellExperiment ## dim: 10 10 ##元数据(0):## assays(1):计数## rownames: NULL ## rowData names(0): ## colnames: NULL ## colData names(0): ## reducedDimNames(0): ## mainExpName: NULL ## altExpNames(0): ## subsets(0): ## subsetAssays(0):

5.2createSubset

createSubset方法从名称中可以看出,该方法从已经可用的对象中创建子集分析在对象中。的subsetName(一个字符字符串),rowIndices(一个数字字符向量),colIndices(一个数字字符向量),parentAssay(一个字符字符串的标准参数createSubset方法。如果rowIndicescolIndices失踪,则从指定的parentAssay.如果parentAssay失踪,父对象的第一个可用分析被链接为这个子集的父。的parentAssay可以是分析对象的子集或分析在子集中。

es <- createSubset(es, subsetName = "subset1", rows = c(1:2), cols = c(1:5), parentAssay = "counts") es
##类:SubsetSingleCellExperiment ## dim: 10 10 ##元数据(0):## assays(1):计数## rownames: NULL ## rowData names(0): ## colnames: NULL ## colData names(0): ## reducedDimNames(0): ## mainExpName: NULL ## altExpNames(0): ## subsets(1): subset1 ## subsetAssays(1): subset1

5.3setSubsetAssay而且getSubsetAssay

setSubsetAssay方法时应使用分析需要存储在先前创建的子集中。这与createSubset方法,该方法仅通过引用已定义的对象来创建子集parentAssay在哪里internalAssay子集中没有存储分析。的setSubsetAssay方法,用于存储分析在这个internalAssay子集的Slot,实际上是与父对象相同类的子集实验对象。

subset1Assay <- assay(es, "subset1") subset1Assay[,] <- subset1Assay[,] + 1 es <- setSubsetAssay(es, subsetName = "subset1", inputMatrix = subset1Assay, subsetAssayName = "subset1Assay") es
##类:subsetsinglecellexper实验组## dim: 10 10 ##元数据(0):## assays(1):计数## rownames: NULL ## rowData names(0): ## colnames: NULL ## colData names(0): ## reducedDimNames(0): ## mainExpName: NULL ## altExpNames(0): ## subsets(1): subset1 # subsetAssays(2): subset1 subset1Assay

这种方法的感兴趣的参数是subsetName它指定输入分析应该存储在其中的子集的名称,inputMatrix属性指定的子集中存储的矩阵类型对象是哪个subsetName参数,最后是subsetAssayName参数,该参数表示新分析的名称。

为了进行子集检测,getSubsetAssay方法:

getSubsetAssay(es, "subset1")
# # [1] [2] [3] [4] [5] # # [1] 11 11 8 8 9 # # 11 16 9 11 11 [2]
get内部的subset1化验
# # [1] [2] [3] [4] [5] # # [1] 12 12 9 9 10 # # 12 17 10 12 12 [2]

除了setSubsetAssay而且getSubsetAssay方法,分析而且分析< -方法也可以用于相同的目的。它们的用法已在下面的覆盖方法一节中描述。

5.4subsetSummary

subsetSummary方法的总体摘要ExperimentSubset对象,包括父对象中的分析、子集列表以及存储的分析、降维、Alt实验和其他可能帮助用户了解对象当前状态的补充信息。该方法显示的最重要的信息是对象中每个子集的分层“父-子集”链接。

subsetSummary (es)
##主化验:## counts ## ##子集:## Name Dim Parent Assays ## 1 subset1 2,5 counts subset1Assay

5.5其他帮助器方法

提供了辅助方法,供用户在特定情况下操作数据子集时使用。这些辅助方法及其简短描述如下:

  1. subsetNames返回所有可用子集的名称(不包括内部子集分析)
  2. subsetAssayNames返回所有可用子集的名称(包括内部子集分析)
  3. subsetCount返回子集的总数(不包括内部子集测定)
  4. subsetAssayCount返回子集的总数(包括内部子集分析)
  5. subsetDim返回指定子集的维数
  6. subsetColData获取或设置colData从/到子集
  7. subsetRowData获取或设置rowData从/到子集
  8. subsetColnames获取或设置从/到子集的colname
  9. subsetRownames获取或设置从/到子集的行名
  10. subsetParent返回指定子集的“sub -parent”链接
  11. setSubsetAssay将分析设置为子集
  12. getSubsetAssay从子集获取分析

5.5.1subsetColData & subsetRowData

这两个subsetColData而且subsetrowDataGetter方法包含一个额外的逻辑参数parentColDataparentRowData指定返回的' colData '或' rowData '是否也应该包括父对象的' colData '和' rowData '。默认情况下,parentColData而且parentRowData参数设置为.同样适用于inherited的用法rowData而且colData方法。

#存储colData到父对象colData(es) <- cbind(colData(es), sampleID = seq(1:dim(es)[2])) #存储colData到'subset1'使用选项1 colData(es, subsetName = "subset1") <- cbind(colData(es, subsetName = "subset1"), subsetSampleID1 = seq(1:subsetDim(es, "subset1")[2])) #存储colData到'subset1'使用选项2 subsetColData(es, "subset1") <- cbind(subsetColData(es, "subset1"), subsetSampleID2 = seq(1:subsetDim(es, "subset1")"subset1")[2])) #从'subset1'中获取colData,不包含父colData subsetColData(es, "subset1", parentColData = FALSE)
## 5行2列的数据帧## subsetSampleID1 subsetSampleID2 ##   ## 1 1 1 ## 2 2 2 ## 3 3 3 ## 4 4 4 ## 5 5 5 5 5
#从subset1中获取colData subsetColData(es, "subset1", parentColData = TRUE)
## 5行3列的数据帧## sampleID subsetSampleID1 subsetSampleID2 ##    ## 1 1 1 1 ## 2 2 2 2 ## 3 3 3 4 4 4 4 ## 5 5 5 5 5 5
#同样适用于' colData '和' rowData '方法时,使用子集colData(es, subsetName = "subset1", parentColData = FALSE) #没有父数据
## 5行2列的数据帧## subsetSampleID1 subsetSampleID2 ##   ## 1 1 1 ## 2 2 2 ## 3 3 3 ## 4 4 4 ## 5 5 5 5 5
colData(es, subsetName = "subset1", parentColData = TRUE) #与父数据
## 5行3列的数据帧## sampleID subsetSampleID1 subsetSampleID2 ##    ## 1 1 1 1 ## 2 2 2 2 ## 3 3 3 4 4 4 4 ## 5 5 5 5 5 5

5.6的覆盖方法ExperimentSubset

类的子集特性而从其他类中重写了这些方法ExperimentSubset对象,通过引入额外的参数subsetName对这些方法。这些方法可以简单地在任何ExperimentSubset对象从父对象或任何子集中获取或设置subsetName参数。

这些方法包括rowDatarowData < -colDatacolData < -元数据元数据< -reducedDimreducedDim < -reducedDimsreducedDims < -reducedDimNamesreducedDimNames < -altExpaltExp < -altExpsaltExps < -altExpNames而且altExpNames < -.所有的方法都可以通过提供可选的方法与子集一起使用subsetName参数。

5.6.1Assay-get和assay-set继承方法

的使用是上述方法的一个例外分析而且分析< -方法,两者的用法略有不同,如下所述:

因为分析< -如果一个子集需要在该子集中存储分析结果,那么我们需要指定存储分析结果的子集名称参数,并将子集分析的新名称定义为附加名称subsetAssayName参数。

#创建一个虚拟的ES对象计数< -矩阵(rpois(100年,λ= 10),ncol = 10, nrow = 10) sce < - SingleCellExperiment(列表(数量=计数))ES < - ExperimentSubset (sce) #创建一个子集ES < - createSubset (ES subsetName =“subset1”,行= c(1:2),关口= c(1:4)) #存储一个试验在新创建的“subset1”#注意“分析< - setter有两个重要参数的x”和“我”,# ' x '是对象和“我”是试验名称,但在存储一个#子集,我们使用“x”的对象,'i'作为子集名称,其中应该存储化验#和一个额外的'subsetAssayName'参数,该参数定义了#新化验化验的名称(x = es, i = "subset1", subsetAssayName = "subset1InternalAssay") <- matrix(rpois(100, lambda = 10), ncol=4, nrow=2)

使用分析Getter方法很简单,因为与setter方法不同,不需要额外的参数。

#化验getter有参数“x”,它是输入对象,“i”可以是父对象中的化验名称,子集名称或子集化验名称#从父es对象化验中获取“计数”(x = es, i = "counts")
# #[1][2][3][4][5][6][7][8][9][10] # #[1] 10 10 17 8 12 15 6 10 10 # #[2] 7 9 6 6 7 12 11 11 4 7 # #[3] 10 13 9 13 5 5 13 6 11 6 # #[4] 5 11 8 3 14 4 10 10 9 11 # #[5] 7 13 14 9 7 4 9 7 6 9 # #[6] 11 9 11 14 13 6 2 19 5 8 # #[7] 9 18 11 11 2 10 16 9 13日12 # # [8]12 12 12 12 8 13 12 7 12 2 # # [9]10 8 6 7 8 9 9 6 13 13 # # [10]4 4 13 9 3 12 12 7 11 13
#获取es对象的subset1 (x = es, I = "subset1")
# # [1] [2] [3] [4] # # [1] 10 10 17 8 # # [2] 7 9 6 6
#从'subset1'化验中获取'subset1InternalAssay' (x = es, i = "subset1InternalAssay")
# # [1] [2] [3] [4] # # [1] 8 11 15 8 # # 10 9 9 11 [2]

6使用ExperimentSubset对象:一个玩具样例

创建ExperimentSubset对象的操作非常简单,只需将实验对象传递给ExperimentSubset构造函数:

counts <- matrix(rpois(100, lambda =10), ncol=10, nrow=10) sce <- singlecel实验(list(counts = counts)) es <- experiment子集(sce) subsetSummary(es)
# #主要分析(s): # # # # # #计数子集(s): # # NULL

创建一个只包含前5行和前5列的子集:

- subsetset (es, subsetName = "subset1", rows = c(1:5), cols = c(1:5), parentAssay = "counts") subsetSummary(es)
##主化验:##计数## ##子集:##名称Dim Parent ## 1 subset1 5,5个计数

从创建另一个子集subset1只保留前两行:

- createSubset(es, subsetName = "subset2", rows = c(1:2), cols = c(1:5), parentAssay = "subset1") subsetSummary(es)
##主化验:##计数## ##子集:##名称Dim Parent ## 1 subset1 5,5计数## 2 subset2 2,5 subset1 ->计数

得到分析subset2和更新值:

subset2Assay <- assay(es, "subset2") subset2Assay[,] <- subset2Assay[,] + 1

存储更新后的分析subset2使用以下两种方法之一:

#方法1 es <- setSubsetAssay(es, subsetName = "subset2", inputMatrix = subset2Assay, subsetAssayName = "subset2Assay_a1") #方法2化验(es, "subset2", subsetAssayName = "subset2Assay_a2")
##主化验:##计数## ##子集:##名称Dim Parent Assays ## 1 subset1 5,5计数## 2 subset2 2,5 subset1 ->计数subset2Assay_a1, subset2Assay_a2

对象中存储实验对象altExp槽的subset2

altExp(x = es, e = "subset2_alt1", subsetName = "subset2") <- singlecel实验(化验= list(计数=化验(es, "subset2")))

显示当前的状态ExperimentSubset对象:

subsetSummary (es)
##主化验:##计数## ##子集:##名称Dim Parent Assays ## 1 subset1 5,5计数## 2 subset2 2,5 subset1 ->计数subset2Assay_a1, subset2Assay_a2 ## AltExperiments ## 1 ## 2 subset2_alt1

7使用ExperimentSubset对象:一个真实单细胞RNA-seq数据的例子

安装和加载所需的软件包:

如果(!requireNamespace("BiocManager", quiet = TRUE) install.packages("BiocManager") BiocManager::install(version = "3.11", ask = FALSE) BiocManager::install(c("TENxPBMCData", "scater", "scran"))
库(experimental子集)库(TENxPBMCData)库(scater)库(scran)

加载PBMC4K数据集并创建ExperimentSubset对象:

tenx_pbmc4k <- TENxPBMCData(dataset = "pbmc4k") es <- experiment子集(tenx_pbmc4k) subsetSummary(es)

计算perCellQCMetrics计数矩阵:

perellqcmetrics <- perellqcmetrics (assay(es, "counts")) colData(es) <- cbind(colData(es), perCellQCMetrics)

过滤低列和的单元格,并创建一个名为' filteredCells '的新子集:

filteredCellsIndices <- which(colData(es)$sum > 1500) es <- createSubset(es, "filteredCells", cols = filteredCellsIndices, parentAssay = "counts") subsetSummary(es)

Normalize ' filteredCells '子集使用库并存储回:

assay(es, "filteredCells", subsetAssayName = "filteredCellsNormalized") <- normalizeCounts(assay(es, "filteredCells")) subsetSummary(es)

从上一步的归一化检测中找到高度可变的基因食物库只针对' filteredCells '子集:

topHVG1000 <- getTopHVGs(modelGeneVar(assay(es, "filteredCellsNormalized")), n = 1000) es <- createSubset(es, "hvg1000", rows = topHVG1000, parentAssay = "filteredCellsNormalized") subsetSummary(es)

在最后一步中计算的高变量基因上运行“PCA”库只针对' filteredCells '子集:

reducedDim(es, type = "PCA", subsetName = "hvg1000") <- calculatePCA(assay(es, "hvg1000"))

的当前状态ExperimentSubset对象:

subsetSummary (es)

8支持的输入对象类

  1. SummarizedExperiment
  2. RangedSummarizedExperiment
  3. SingleCellExperiment
  4. TreeSummarizedExperiment
  5. SpatialExperiment

9的方法ExperimentSubset

  1. ExperimentSubset构造函数
  2. createSubset
  3. setSubsetAssay
  4. getSubsetAssay
  5. subsetSummary
  6. subsetParent
  7. subsetCount
  8. subsetAssayCount
  9. subsetNames
  10. subsetAssayNames
  11. subsetDim
  12. subsetRowData
  13. subsetColData
  14. subsetColnames
  15. subsetRownames
  16. subsetRowData < -
  17. subsetColData < -
  18. subsetColnames < -
  19. subsetRownames < -
  20. 显示
  21. 分析
  22. 分析< -
  23. rowData
  24. rowData < -
  25. colData
  26. colData < -
  27. 元数据
  28. 元数据< -
  29. reducedDim
  30. reducedDim < -
  31. reducedDims
  32. reducedDims < -
  33. reducedDimNames
  34. reducedDimNames < -
  35. altExp
  36. altExp < -
  37. altExps
  38. altExps < -
  39. altExpNames
  40. altExpNames < -
  41. subsetSpatialCoords
  42. subsetSpatialData
  43. subsetSpatialData < -
  44. subsetRowLinks
  45. subsetColLinks
  46. spatialCoords
  47. spatialData
  48. spatialData < -
  49. rowLinks
  50. colLinks

10实现细节

的内部结构ExperimentSubset类描述如下:

10.1继承的父对象

ExperimentSubset对象中指定的类之一SubsetSummarizedExperimentSubsetRangedSummarizedExperimentSubsetSingleCellExperiment它们继承自输入对象的类。这确保了ExperimentSubset对象可以以类似于输入对象类的方式进行操作,因此可以用作这些类的直接替换。与输入对象类兼容的所有方法都与ExperimentSubset对象也是。

10.2额外的子集

子集槽位号ExperimentSubset对象是SimpleList,其中该列表中的每个元素都是一个内部类型的对象AssaySubset类。类提供的方法来访问槽本身,用户不能直接访问它ExperimentSubset包中。每个元素表示父对象中链接到实验对象的一个子集。每个子集的结构如下所述:

10.2.1subsetName

一个字符表示子集的用户定义名称的字符串。

10.2.2rowIndices

一个数字向量用于存储此子集的链接父分析中选定行的索引。

10.2.3colIndices

一个数字向量用于存储该子集的链接父分析中所选列的索引。

10.2.4parentAssay

一个字符字符串,该字符串存储子集链接到的直接父节点的名称。的parentAssay可以是分析在父元素中ExperimentSubset对象或任何子集或任何internalAssay子集的。

10.2.5internalAssay

internalAssaySlot存储与输入对象类型相同但具有子集维度的实验对象。的internalAssay最初是一个空的实验对象,仅设置维度以启用操作,但可用于存储针对子集的额外数据,如分析rowDatacolDatareducedDimsaltExps而且元数据

11会话信息

sessionInfo ()
## R正在开发中(不稳定)(2022-10-25 r83175) ##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 22.04.1 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.17-bioc/R/lib/libRblas。so ## LAPACK: /usr/lib/x86_64-linux-gnu/ LAPACK /liblapack.so.3.10.0 ## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_GB LC_COLLATE= c# # [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# # [9] LC_ADDRESS=C lc_phone = c# # [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]stats4 stats graphics grDevices utils datasets methods ##[8]基础## ##其他附加包:# # # # [1] ExperimentSubset_1.9.0 TreeSummarizedExperiment_2.7.0 [3] Biostrings_2.67.0 XVector_0.39.0 # # [5] SpatialExperiment_1.9.0 SingleCellExperiment_1.21.0 # # [7] SummarizedExperiment_1.29.0 Biobase_2.59.0 # # [9] GenomicRanges_1.51.0 GenomeInfoDb_1.35.0 # # [11] IRanges_2.33.0 S4Vectors_0.37.0 # # [13] BiocGenerics_0.45.0 MatrixGenerics_1.11.0 # # [15] matrixStats_0.62.0 BiocStyle_2.27.0 # # # #通过加载一个名称空间(而不是附加):# # # # [1] tidyselect_1.2.0 dplyr_1.0.10 [3] R.utils_2.12.1 bitops_1.0-7 # # [5] fastmap_1.1.0 rcurl_1.98 - 1.9 # # [7] lazyeval_0.2.2 digest_0.6.30 # # [9] lifecycle_1.0.3 tidytree_0.4.1 # # [11] magrittr_2.0.3 compiler_4.3.0 # # [13] rlang_1.0.6 sass_0.4.2 # # [15] tools_4.3.0 utf8_1.2.2 # # [17] yaml_2.3.6 knitr_1.40 # # [19] dqrng_0.3.0 DelayedArray_0.25.0 # # [21] BiocParallel_1.33.0 HDF5Array_1.27.0 # # [23] purrr_0.3.5 R.oo_1.25.0 # # [25] grid_4.3.0 fansi_1.0.3 # # [27] beachmat_2.15.0 Rhdf5lib_1.21.0## [39] ape_5.6-2 cachem_1.0.6 ## [41] rhdf5_2.43.0 string_1 .4.1 ## [43] zlibbioc_1.45.0 assertthat_0.2.1 ## [45] parallel_4.3.0 BiocManager_1.30.19 ## [47] yulab.utils_0.0.5 vctrs_0.5.0 ## [51] Matrix_1.5-1 jsonlite_1.8.3 ## [51] bookdown_0.29 limma_3.55.0 ## # [55]jquerylib_0.1.4 tidyr_1.2.1 ## [57] glue_1.6.2 DropletUtils_1.19.0 ## [59] codetools_0.2-18 stringi_1.7.8 ## [61] tibble_3.1.8 pillar_1.8.1 ## [63] htmltools_0.5.3 rhdf5filters_1.11.0 ## [65] GenomeInfoDbData_1.2.9 R6_2.5.1 ## [67] sparseMatrixStats_1.11.0 evaluate_0.17 ## [69] lattice_0.20-45 R.methodsS3_1.8.2 ## [71] bslib_0.4.0 Rcpp_1.0.9 ## [73] nlme3.1 -160 xfun_0.34 ## [75] pkgconfig_2.0.3