1动机

SingleCellExperiment是相当复杂的类,它可以容纳多个方面的相同的数据集。可以有多个化验,多个降维结果,和多个不同的实验——每一个都可以进一步有多个化验和reducedDims!在某些情况下,它可能需要遍历这些作品,应用相同的函数。这是方便可行的通过applySCE ()框架。

2快速启动

假设我们有一个适度复杂SingleCellExperiment包含多个替代实验的对象,不同的数据模式。

库(SingleCellExperiment)计数< -矩阵(rpois(100年,λ= 10),ncol = 10, nrow = 10) sce < - SingleCellExperiment(计数)altExp(,“飙升”)< - SingleCellExperiment(矩阵(rpois(20,λ= 5),ncol = 10, nrow = 2)) altExp(,“蛋白质”)< - SingleCellExperiment(矩阵(rpois(50,λ= 100),ncol = 10, nrow = 5)) altExp (,“CRISPR”) < - SingleCellExperiment(矩阵(rbinom (p = 0.1, 80 1), ncol = 10, nrow = 8))预计
# # # #类:SingleCellExperiment暗淡:10 10 # #元数据(0):# #化验(1):“# # rownames:零构成了rowData名称(0):# # # # colnames:零# # colData名称(0):# # reducedDimNames (0): # # mainExpName:零# # altExpNames(3):蛋白质CRISPR飙升

假设我们想要计算每个形态的总计数,使用第一个试验。我们可以定义一个函数,看起来就像下面。(我们会回来的目的乘数=subset.row =后)。

totalCount < -函数(x, i = 1,乘数= 1,subset.row = NULL){垫< -试验(x,我)如果(! is.null (subset.row)){垫< -垫(子集。行,,= FALSE)} colSums(垫)*乘数}

我们可以轻松地应用这个函数在主要和替代实验:

总数< - applySCE (sce、有趣= totalCount)总数
# # # #[1]([1])91 105 95 111 99 99 90 90 99 92 # # # # # #飙升[1]11 8 8 13 11 9 17 11 11 10 # # # # # # $蛋白质[1]510 463 495 487 508 514 559 504 484 495 # # # # # # CRISPR [1] 0 2 0 1 1 0 1 0 2 1

3设计说明

applySCE ()以上功能相当于:

总数。手册< -列表(totalCount (sce),峰值= totalCount (altExp(,“飙升”)),蛋白质= totalCount (altExp(,“蛋白质”)),CRISPR = totalCount (altExp (,“CRISPR”))) stopifnot(相同(总数、totals.manual))

除了更详细applySCE (),这种方法不适应常见的参数。说我们想集乘数= 10对所有电话。与上面的手工方式中,这将涉及多次指定参数:

totals10。手册< -列表(totalCount (sce乘数= 10),峰值= totalCount (altExp(,“飙升”),乘数= 10),蛋白质= totalCount (altExp(,“蛋白质”),乘数= 10),CRISPR = totalCount (altExp (,“CRISPR”),乘数= 10))

而与applySCE ()的方法,我们可以把它一次。这使得它更容易改变,减少了出错的可能性当复制粘贴在调用参数列表。

totals10。应用< - applySCE (sce、有趣= totalCount乘数= 10)stopifnot(相同(totals10。应用,totals10.manual))

现在,人们可能会考虑使用拉普兰人()在这种情况下,也避免了重复规范:

totals10。拉普兰人< -拉普(c(列表(sce) altExps (sce)),有趣= totalCount乘数= 10)stopifnot(相同(totals10。应用,totals10.lapply))

然而,这个遇到了相反的问题——它不再是可以指定自定义为每个调用参数。例如,假设我们想为每个主要的一组不同的特征子集和替代实验。与applySCE ()这仍然是可能的:

总数。自定义<- applySCE(sce, FUN=totalCount, multiplier=10, ALT.ARGS=list(Spike=list(subset.row=2), Protein=list(subset.row=3:5))) totals.custom
# # # #[1]([1])910 1050 950 1110 990 990 900 900 990 920 # # # # # #飙升[1]40 40 70 90 70 90 20 40 60 # # # # # # $蛋白质[1]2960 2840 3010 2870 2710 3060 3280 3090 2860 2950 # # # # # # CRISPR [1] 20 0 10 10 0 10 0 20 10

在这种情况下,我们有一个自定义之间的混合和常见的参数,applySCE ()提供一个更方便和灵活的接口比手动调用或拉普兰人()荷兰国际集团(ing)。

4简化到一个SingleCellExperiment

另一个方便的方面applySCE ()是,如果指定的吗有趣的=返回一个SingleCellExperiment,applySCE ()将尝试格式化输出作为一个SingleCellExperiment。为了演示,让我们使用头()函数将每个主要的头几个特性和替代实验:

头。南加州爱迪生公司<- applySCE(sce, FUN=head, n=5) head.sce
# # # #类:SingleCellExperiment暗淡:5 10 # #元数据(0):# #化验(1):“# # rownames:零构成了rowData名称(0):# # # # colnames:零# # colData名称(0):# # reducedDimNames (0): # # mainExpName:零# # altExpNames(3):蛋白质CRISPR飙升

而不是返回的列表SingleCellExperiment年代,我们可以看到,输出是整齐有序的作为SingleCellExperiment与指定的n = 5特性。此外,每个替代实验也截断首次5特性(或更少,如果没有许多开始)。这个输出镜,尽可能多的格式输入南加州爱迪生公司,更方便的使用对象的列表。

altExp (head.sce)
# # # #类:SingleCellExperiment暗淡:2 10 # #元数据(0):# #化验(1):“# # rownames:零构成了rowData名称(0):# # # # colnames:零# # colData名称(0):# # reducedDimNames (0): # # mainExpName:零# # altExpNames (0):
altExp(头。南加州爱迪生公司,"Protein")
# # # #类:SingleCellExperiment暗淡:5 10 # #元数据(0):# #化验(1):“# # rownames:零构成了rowData名称(0):# # # # colnames:零# # colData名称(0):# # reducedDimNames (0): # # mainExpName:零# # altExpNames (0):
altExp(头。南加州爱迪生公司,"CRISPR")
# # # #类:SingleCellExperiment暗淡:5 10 # #元数据(0):# #化验(1):“# # rownames:零构成了rowData名称(0):# # # # colnames:零# # colData名称(0):# # reducedDimNames (0): # # mainExpName:零# # altExpNames (0):

看看引擎盖下面,我们可以关掉简化,看看会发生什么。我们确实看到,函数返回一个列表SingleCellExperiment对象对应于头()每个实验。当简化= TRUE这个列表是通过simplifyToSCE ()尝试重组成一个单一的对象。

head.sce。< - applySCE列表(sce、有趣=头,n = 5,简化= FALSE) head.sce.list
([1])# # # #类:SingleCellExperiment # #暗淡:5 10 # #元数据(0):# #化验(1):“# # rownames:零构成了rowData名称(0):# # # # colnames:零# # colData名称(0):# # reducedDimNames (0): # # mainExpName:零# # altExpNames(3):峰值蛋白质CRISPR # # # # $ # #飙升类:SingleCellExperiment # #暗淡:2 10 # #元数据(0):# #化验(1):“# # rownames:零构成了rowData名称(0):# # # # colnames:零# # colData名称(0):# # reducedDimNames (0): # # mainExpName:零# # altExpNames(0): # # # # # # $蛋白质类:SingleCellExperiment # #暗淡:5 10 # #元数据(0):# #化验(1):“# # rownames:零构成了rowData名称(0):# # # # colnames:零# # colData名称(0):# # reducedDimNames (0): # # mainExpName:零# # altExpNames (0): # # # # $ CRISPR # #类:SingleCellExperiment # #暗淡:5 10 # #元数据(0):# #化验(1):“# # rownames:零构成了rowData名称(0):# # # # colnames:零# # colData名称(0):# # reducedDimNames (0): # # mainExpName:零# # altExpNames (0):

相比之下,手动如果我们不得不这样做,这将是相当繁琐和容易出错的,例如,如果我们忘了n =或者我们重新分配的输出头()错误的选择实验。

手册。头< -头(大带宽,n = 5) altExp(手册。头,“飙升”)< -头(altExp(,“飙升”),n = 5) altExp(手册。头,“蛋白质”)< -头(altExp(,“蛋白质”),n = 5) altExp(手册。头,“CRISPR”) < -头(altExp (,“CRISPR”), n = 5) manual.head
# # # #类:SingleCellExperiment暗淡:5 10 # #元数据(0):# #化验(1):“# # rownames:零构成了rowData名称(0):# # # # colnames:零# # colData名称(0):# # reducedDimNames (0): # # mainExpName:零# # altExpNames(3):蛋白质CRISPR飙升

当然,这种简化是唯一可能的情况允许的时候。它要求有趣的=返回一个SingleCellExperiment在每一个电话,不超过一个的结果是生成的每个替代实验。未能满足这些条件将导致一个警告和non-simplified输出。

bob电竞体育官网开发人员可能会倾向于集简化= FALSE和手动调用simplifyToSCE (),可能与warn.level = 3简化失败时触发一个显式的错误。

会话信息

sessionInfo ()
# # R版本4.1.0(2021-05-18)# #平台:x86_64-pc-linux-gnu(64位)# #下运行:Ubuntu 20.04.2 LTS # # # #矩阵产品:默认# #布拉斯特区:/home/biocbuild/bbs - 3.13 - bioc / R / lib / libRblas。所以# # LAPACK: /home/biocbuild/bbs - 3.13 - bioc / R / lib / libRlapack。# # # #语言环境:# # [1]LC_CTYPE = en_US。utf - 8 LC_NUMERIC = C # #[3]而= 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 = C LC_TELEPHONE = # # [11] LC_MEASUREMENT = en_US。utf - 8 LC_IDENTIFICATION = C附加基本包:# # # # # #[1]平行stats4统计图形grDevices跑龙套数据集# #[8]方法基础# # # #其他附加包:# # [1]SingleCellExperiment_1.14.1 SummarizedExperiment_1.22.0 # # [3] Biobase_2.52.0 GenomicRanges_1.44.0 # # [5] GenomeInfoDb_1.28.0 IRanges_2.26.0 # # [7] S4Vectors_0.30.0 BiocGenerics_0.38.0 # # [9] MatrixGenerics_1.4.0 matrixStats_0.58.0 # # [11] BiocStyle_2.20.0 # # # #通过加载一个名称空间(而不是附加):# # [1]bslib_0.2.5.1 compiler_4.1.0 BiocManager_1.30.15 # # [4] jquerylib_0.1.4 XVector_0.32.0 bitops_1.0-7 # # [7] tools_4.1.0 zlibbioc_1.38.0 digest_0.6.27 # # [10] jsonlite_1.7.2 evaluate_0.14 lattice_0.20-44 # # [13] rlang_0.4.11 Matrix_1.3-3 DelayedArray_0.18.0 # # [16] yaml_2.2.1 xfun_0.23 GenomeInfoDbData_1.2.6 # # [19] stringr_1.4.0 knitr_1.33 sass_0.4.0 # # [22] grid_4.1.0 R6_2.5.0 rmarkdown_2.8 # # [25] bookdown_0.22 magrittr_2.0.1 htmltools_0.5.1.1 # # [28] stringi_1.6.2 rcurl_1.98 - 1.3