1动机

Singlecellexperiment类是用于存储和操纵单细胞基因组学数据的轻质生物通用容器。它扩展了RangedSummarizedExperiment班级并遵循类似的公约,即行应表示特征(基因,转录本,基因组区域),列应代表细胞。它提供了存储降低降低结果和替代特征集的数据的方法(例如,合成尖峰转录本,抗体衍生的标签)。它是生物导体单细胞包的中央数据结构,例如评分斯克兰

2创建单链体验实例

Singlecellexperiment可以通过同名的构造函数创建对象。例如,如果我们有计数矩阵计数,我们可以简单地致电:

库(SingleCellexperiment)计数<-matrix(rpois(100,lambda = 10),ncol = 10,nrow = 10)
##班级:singlecellexperiment ## dim:10 10 ## metadata(0):## assays(1):''## ROWNAMES:null ## rowdata names(0):## colnames:null ## coldata names(0):## reduceddimnames(0):## mainexpname:null ## altexpnames(0):

实际上,通过在命名列表中传递命名测定通常更有用:

sce <-singlecellexperiment(list(counts = counts))SCE
##班级:singlecellexperiment ## dim:10 10 ## metadata(0):## assays(1):计数## ROWNAMES:null ## rowdata names(0):## colnames:null ## coldata names(0)):## reduseddimnames(0):## mainexpname:null ## altexpnames(0):

同样,可以通过将值传递给适当的参数来设置列和行元数据。我们不会在这里详细介绍,因为大多数都涵盖了总结性特征文档,但举一个例子:

prepend.cell.labels < - 示例(字母,ncol(counts),替换= true)prepend.gene.gene.lengths < -  sample(10000,nrow(counts))sce <-singlecellexperiment(lists = counts = counts = counts = counts = counts = counts = counts = counts),dataframe(label = pretend.cell.labels),rowdata = dataframe(length = prepend.gene.lengths),元数据= list = list(study =“ gse111111”))sce
##班级:SingleCellexperiment ## Dim:10 10 ##元数据(1):研究## Assays(1):计数## ROWNAMES:NULL ## ROWDATA名称(1):长度## colnames:null ## Coldata名称(1):标签## reduseddimnames(0):## mainexpname:null ## altexpnames(0):

或者,我们可以构建Singlecellexperiment通过胁迫现有(远程)总结性特征目的:

se < -  summarizedExperiment(list(counts = counts))为(se,“ singlecellexperiment”)
##班级:singlecellexperiment ## dim:10 10 ## metadata(0):## assays(1):计数## ROWNAMES:null ## rowdata names(0):## colnames:null ## coldata names(0)):## reduseddimnames(0):## mainexpname:null ## altexpnames(0):

任何可以应用于RangedSummarizedExperiment也适用于任何实例Singlecellexperiment。这包括通过测定(),列元数据与coldata(), 等等。同样,没有太多细节:

DIM(测定(SCE))
## [1] 10 10
Colnames(Coldata(SCE))
## [1]“标签”
colnames(rowdata(sce))
## [1]“长度”

为了演示在小插图的其余部分中使用类的使用,我们将使用Allen数据集scrnaseq包裹。

库(scrnaseq)sce <-recocessedallendata(“ tophat_counts”)sce
##类:SingleCellexperiment ## DIM:20816 379 ## Metadata(2):suppinfo whate_qc ## Assays(1):tophat_counts ## Rownames(20816):0610007p14p14rik 0610009b222rik ...## colnames(379):SRR2140028 SRR2140022 ... SRR2139341 SRR2139341 SRR2139336 ## Coldata名称(22):nreads naligned ... Animal.Id passes_qcc_checks_s_qc_checks_s#ERCC

3添加低维表示

我们从计数矩阵计算对数转换的归一化表达值。(我们注意到,其中许多步骤可以作为单线执行评分包装,但我们将在这里全部展示它们,以演示Singlecellexperiment班级。)

计数<-Assay(sce,“ tophat_counts”)libsizes <-colsums(counts)size.factors <-libsizes/mean(libsizes)logcounts(sce)logcounts(sce)<-log2(t(t(t(counts)/size.factors) + 1 + 1 + 1)AssayNames(SCE)
## [1]“ tophat_counts”“ logcounts”

我们获得数据的PCA和T-SNE表示形式,并将其添加到对象中降低dims()< -方法。或者,我们可以一次与降低dim()< -方法(注意缺失s)。

pca_data <-prcomp(t(logcounts(sce)),rank = 50)库(rtsne)set.seed(5252)tsne_data <-rtsne(pca_data $ x [,1:50],pca = false)< -  list(pca = pca_data $ x,tsne = tsne_data $ y)sce
##类:SingleCellexperiment ## DIM:20816 379 ## Metadata(2):suppinfo whate_qc ## ## ASSAYS(2):tophat_counts logcounts ## ROWNAMES(20816):0610007P14P14RIK 0610009B22RIK ...:## colnames(379):srr2140028 srr2140022 ... srr2139341 srr21393336 ## coldata名称(22):nreads naligned ... andial.i antial.id andial.id passes_qc_cc_checks_s_c_checks_s ## yddimname(2)1):ERCC

所有表示形式的坐标都可以从一个Singlecellexperiment大批减少DIMS()或一次按名称/索引还原()。假定坐标矩阵的每一行都对应于单元格,而每列表示一个尺寸。

减少DIMS(SCE)
##长度列表2 ##名称(2):PCA TSNE
还原dimnames(SCE)
## [1]“ pca”“ tsne”
头(reduceddim(SCE,“ PCA”)[,1:2])
## PC1 PC2 ## SRR2140028 -70.23670 33.78880 ## SRR2140022 -41.00366 49.76633 ## SRR2140055 -133.70763 7.68870 ## SRR2140083 -36.26099 113.18806 ## SRR2139991 -100.86439 15.94740 ## SRR2140067 -97.71210 35.77881
头(还原(SCE,“ tsne”)[,1:2])
## [,1] [,2] ## SRR2140028 10.291952 -0.573862 ## SRR2140022 6.158490 -1.280543 ## SRR2140055 -4.611946 5.735881 ## SRR2140083 6.502360 6.623059 ## SRR2139991 8.488418 -1.501760 ## SRR2140067 1.832036 -3.197005

通过列的任何子集sce_sub还将导致细胞减少维度降低结果的子集。这很方便,因为它可以确保我们的低维结果始终与基因表达数据同步。

DIM(还原Dim(SCE,“ PCA”))
## [1] 379 50
DIM(降低DIM(SCE [,1:10],“ PCA”))
## [1] 10 50

4方便访问命名测定

在里面Singlecellexperiment,用户可以将任意名称分配给条目测定。为了协助包装之间的互操作性,我们为特定类型的数据的名称提供了一些建议:

  • 计数:原始计数数据,例如,特定基因的读取或成绩单数量。
  • 规范:与原始计数相同的尺度上的归一化值。例如,计数除以以统一性为中心的细胞特异性尺寸因子。
  • 登录:对数转换计数或类似计数的值。在大多数情况下,这将定义为log转换规范,例如,使用日志底座2和1个伪计数为1。
  • CPM:每百万计数。这是每个单元中每个基因的读数,除以数百万个单元的库大小。
  • TPM:每百万个成绩单。这是每个细胞中每个基因的转录本数,除以该单元中的转录本总数(以数百万美元)。

这些建议的名称中的每一个都有适当的getter/setter方法,以方便地操纵Singlecellexperiment。例如,我们可以采用(非常明确的命名)tophat_counts命名并将其分配给计数反而:

计数(sce)< - 分析(sce,“ tophat_counts”)sce
##类:SingleCellexperiment ## Dim:20816 379 ## Metadata(2):SuppInfo Who_QC ## Assays(3):Tophat_counts logcounts logcounts Counts Counts ## Rownames(20816):0610007P14RIK 0610009B22RIK ... ZZE ZZEF.ZZZEME ZZZ33 #WUME):## colnames(379):srr2140028 srr2140022 ... srr2139341 srr21393336 ## coldata名称(22):nreads naligned naligned ... andial.id andial.id passes_qc_cc_checks_s_s_s_s ##降低了ddimname #pcapn#pcapn#ables:(1):ERCC
DIM(计数(SCE))
## [1] 20816 379

这意味着期望计数数据的函数可以简单地调用计数()不必担心特定包装的命名约定。

5添加替代功能集

许多SCRNA-SEQ实验包含内源基因以外多种特征类型的测序数据:

  • 用于基于板的实验的外部添加了尖峰成绩单。
  • 引用seq实验的抗体标签。
  • CRISPR标签用于CRISPR-SEQ实验。
  • 用于涉及多种基因型的实验的等位基因信息。

这样的功能可以存储在Singlecellexperiment通过“替代实验”的概念。这些是嵌套的总结性特征保证具有相同数字和列的订购的实例Singlecellexperiment本身。因此,内源基因和其他特征的数据可以保持分开 - 通常是可取的,因为它们需要进行不同的处理,同时仍保留在单个对象上操作的同步。

为了说明,请考虑Allen数据中的尖峰成绩单的情况。这altexp()方法返回一个独立的Singlecellexperiment实例仅包含尖峰成绩单。

altexp(SCE)
##班级:SingleCellexperiment ## Dim:92 379 ## Metadata(2):suppinfo who_qc ## ## ASSAYS(1):TOPHAT_COUNTS ## ROWNAMES(92):ERCC-00002 ERCC-00002 ...## rowdata名称(0):## colnames(379):srr2140028 srr2140022 ... srr2139341 srr2139336 ## coldata names(0):## reduseDimeDimnames(0)

每个替代实验可以从主要的Singlecellexperiment。在必须将其他特征类型进行标准化或转换不同的情况下,这很有用。同样,替代实验可以具有不同的rowdata()从主要对象。

rowdata(altexp(sce))$浓度<-runif(nrow(altexp(sce)))rowdata(altexp(sce))
## dataframe,带92行和1列##浓度## <数字> ## ercc-00002 0.034970 ## ercc-00003 0.979286 ## ercc-00004 0.171510 ## ercc-00009 0.5777606 ## ercc-0006 ## ercc-00012 0.96512 0.965111###。.. ... ## ERCC-00164 0.2945227 ## ERCC-00165 0.4449455 ## ERCC-00168 0.2821027 ## ERCC-00170 0.08170 0.0817114 ## ERCC-00171 0.4178510 0.4178510
Rowdata(SCE)
## DataFrame,带有20816行和0列

我们提供splitaltexps()实用程序轻松拆分Singlecellexperiment进入新的替代实验。例如,如果我们想将Riken成绩单分为一个单独的实验 - 例如,以确保它们不会在下游分析中不使用,而不会明确抛出数据 - 我们会做:

is.riken <-grepl(“^[0-9]”,Rownames(sce))sce <-splitaltexps(sce,ifelse(is.riken,“ riken”,“ riken”,“ gene”))altexpnames(sce)
## [1]“ ercc”“ riken”

另外,如果我们想交换主要和替代实验 - 也许是因为Riken成绩单比预期的要有趣,并且我们想对它们进行分析 - 我们可以简单地使用swapaltexp()要使用基因表达数据切换Riken替代实验:

swapaltexp(sce,“ riken”,保存=“原始”)
##类:SingleCellexperiment ## DIM:611 379 ## Metadata(2):SuppInfo Who_QC ## Assays(3):Tophat_counts logcounts logcounts计数## ROWNAMES(611):0610007p14rik 0610009b222rik ...(0):## colnames(379):SRR2140028 SRR2140022 ... SRR2139341 SRR2139341 SRR2139336 ## Coldata名称(22):nreads naligned ... naligned ... andial.id passes_qc_cc_checks_s_c_checks_s ## s ## reduseddimnamname:expn:quiken:quiken:pcaame:pcaame:pcaame:pcaame:pcaame:steme##Altexpnames(2):ERCC原始

6存储行或列配对

单细胞分析中的一个常见程序是识别细胞对之间的关​​系,例如,构建最近的邻居图或标记细胞之间的假定物理相互作用。我们可以在Singlecellexperimentcolpairs()功能。为了证明,说我们之间的细胞之间有100个关系SCE,以某种距离度量为特征:

cell1 < - 示例(ncol(sce),100,替换= true)cell2 < -  sample(ncol(sce),100,替换= true)距离<-runif(100)

我们将其存储在Singlecellexperiment作为一个自我打击对象使用价值元数据字段保存我们的数据。这很容易提取为自我打击或者,对于逻辑或数字数据,作为来自矩阵

colpair(sce,“关系”)< -  selfhits(cell1,cell2,nnonode = ncol(sce),value =距离)colpair(sce,“关系”)
##自动打击对象,带有100个命中和1个元数据列:##从to |值##   |<数字> ## [1] 2 224 |0.3155391 ## [2] 2 311 |0.0554668 ## [3] 12 200 |0.6148850 ## [4] 16 304 |0.0174597 ## [5] 21 244 |0.9801941 ## ... ......。... ## [96] 349 369 |0.662352 ## [97] 349 372 | 0.839914 ## [98] 352 10 | 0.540362 ## [99] 360 172 | 0.392147 ## [100] 360 237 | 0.626605 ## ------- ## nnode: 379
类(colpair(sce,assparse = true))
## [1]“ dgcmatrix” ## attr(“ package”)## [1]“ matrix”

一个特别有用的功能是,当相互作用单元格的索引在SCE被子。这样可以确保配对始终与单元中的单元的身份同步SCE

sub <-sce [,50:300] colpair(sub)#如果没有提供“类型”,请抓住第一个配对。
##带有46个命中和1个元数据列的自我打击对象:##从to |值##   |<数字> ## [1] 7 157 |0.748443 ## [2] 11 2 |0.260945 ## [3] 18 203 |0.857025 ## [4] 19 217 |0.967591 ## [5] 32 249 |0.608411 ## ... ......。... ## [42] 236 3 |0.17149734 ## [43] 240 245 | 0.98800819 ## [44] 245 52 | 0.00164622 ## [45] 248 208 | 0.53441707 ## [46] 250 65 | 0.31503674 ## ------- ## nnode: 251

通过rowpairs()功能家族,这对于表示共表达或调节网络有用。

7其他元数据字段

Singlecellexperiment课程提供sizeFactors()Getter和Setter方法,从酷塔对象。每个尺寸因子代表在下游比较之前(例如,消除库尺寸和其他细胞特异性偏差)的差异的效果之前,将缩放因子应用于单元格在下游比较之前归一化表达值。这些方法主要用于实现归一化方法的功能中的程序使用,但是用户也可以直接调用此方法以检查或定义分析的尺寸因素。

#组成一些尺寸因素并存储它们:sizeFactors(SCE)<-2^rnorm(ncol(sce))摘要(sizeFactors(sce))
##最小。第1次。中值平均第三次。最大限度。## 0.1336 0.6761 1.0082 1.2365 1.5034 9.8244
#删除尺寸因子:sizeFactors(SCE)<-NULL SIZEFACTOR(SCE)
## 无效的

consemels()Getter和Seters方法允许应用程序设置和检索单元标签酷塔。这些标签可以从分类算法等分配的群集注释中得出,并且通常用于下游可视化和分析。虽然可以将标签存储在任何酷塔字段,consemels()方法旨在为默认位置提供一些非正式标准化,而下游功能在尝试检索注释时可以首先搜索。

#编制一些标签并存储它们:collecters(sce)< -  sample(Letters,ncol(sce),替换= true)table(collectels(sceels))
## ## a b c d e f g h i j k l m n o p q r s t u v w v w x y z ## 18 14 13 13 16 12 19 14 10 12 14 10 12 14 13 16 10 25 25 25 8 12 19 14 19 14 19 14 19 12 17 11 11 9
#删除标签:collecnels(sce)<-Null Collagels(SCE)
## 无效的

同样,我们提供rowsubset()用户设置并获取行的功能Rowdata。这将存储任何基因身份的向量(例如,行名,整数索引,逻辑向量)Singlecellexperiment对象用于检索和下游功能。然后,用户可以轻松将多个功能集包装到同一对象中进行同步操作。

#将整数或字符向量打包到rowdata中:rowsubset(sce,“我的基因set 1”)<-1:10 where(rowsubset(sce,“我的基因set 1”))
## [1] 1 2 3 4 5 6 7 8 9 10
#易于删除:rowsubset(sce,“我的基因set 1”)< -  null rowsubset(sce,“我的基因set 1”)
## 无效的

会话信息

SessionInfo()
## R版本4.2.0 RC(2022-04-19 R82224)##平台:x86_64-pc-linux-gnu(64位)### blas:/home/biocbuild/bbs-3.15-bioc/r/lib/libblas.so ## lapack:/home/biocbuild/bbs-3.15-bioc/rib/lib/libb/librlapack.so ### ## ## locale:## [1] lc_ctype = en_us.utf-8 lc_numeric = c ## [3] lc_time = en_gb lc_collat​​e = c ## [5] lc_us.us.utf-8 lc_messages = en_us.utf-8 ## [7]lc_paper = en_us.utf-8 lc_name = c ## [9] lc_address = c lc_telephone = c ## [11] lc_measurement = en_us.utf-8 lc_istientification = c ## ## ## ## ##附件:统计图形GRDEVICES UTILS数据集方法## [8]基础## ##其他附件:## [1] rtsne_0.16 scrnaseq_2.9.2.2.2.2.2 ## [3] singlecellexperiment_1.1.18.0genomicranges_1.48.0 ## [7] genomeInfodb_1.32.0 iranges_2.30.0 ## [9] s4Vectors_0.34.0 biocgenerics_0.42.0.42.0 ## [11] matrixgenerics_1.1.1.8.8.8.8.8.8.8.8.8.0名称ace(并且未连接):## [1] protgenerics_1.28.0 bitops_1.0-7 ## [3] bit64_4.0.5 filelock_1.0.2 ## [5] progress_1.2.2bslib_0.3.1 ## [9] utf8_1.2.2 r6_2.5.1 ## [11] lazyeval_0.2.2 dbi_1.1.1.1.2 ## [13] withr_2.5.0 tidySelect_1.1.1.1.1.2 ## [15]17] curl_4.3.2 compiler_4.2.0 ## [19] cli_3.3.0 xml2_1.3.3 ## [21] DelayedArray_0.22.0 rtracklayer_1.56.0 ## [23] bookdown_0.26 sass_0.4.1 ## [25] rappdirs_0.3.3 Rsamtools_2.12.0 ## [27] stringr_1.4.0 digest_0.6.29 ## [29] rmarkdown_2.14 XVector_0.36.0 ## [31] pkgconfig_2.0.3 htmltools_0.5.2 ## [33] ensembldb_2.20.0 dbplyr_2.1.1 ## [35] fastmap_1.1.0 rlang_1.0.2 ## [37] RSQLite_2.2.12 shiny_1.7.1 ## [39] jquerylib_0.1.4 BiocIO_1.6.0 ## [41] generics_0.1.2 jsonlite_1.8.0 ## [43] BiocParallel_1.30.0 dplyr_1.0.8 ## [45] RCurl_1.98-1.6 magrittr_2.0.3 ## [47] GenomeInfoDbData_1.2.8 Matrix_1.4-1 ## [49] Rcpp_1.0.8.3 fansi_1.0.3 ## [51] lifecycle_1.0.1 stringi_1.7.6 ## [53] yaml_2.3.5 zlibbioc_1.42.0 ## [55] BiocFileCache_2.4.0 AnnotationHub_3.4.0 ## [57] grid_4.2.0 blob_1.2.3 ## [59] parallel_4.2.0 promises_1.2.0.1 ## [61] ExperimentHub_2.4.0 crayon_1.5.1 ## [63] lattice_0.20-45 Biostrings_2.64.0 ## [65] GenomicFeatures_1.48.0 hms_1.1.1 ## [67] KEGGREST_1.36.0 knitr_1.38 ## [69] pillar_1.7.0 rjson_0.2.21 ## [71] biomaRt_2.52.0 XML_3.99-0.9 ## [73] glue_1.6.2 BiocVersion_3.15.2 ## [75] evaluate_0.15 BiocManager_1.30.17 ## [77] png_0.1-7 vctrs_0.4.1 ## [79] httpuv_1.6.5 purrr_0.3.4 ## [81] assertthat_0.2.1 cachem_1.0.6 ## [83] xfun_0.30 mime_0.12 ## [85] xtable_1.8-4 AnnotationFilter_1.20.0 ## [87] restfulr_0.0.13 later_1.3.0 ## [89] tibble_3.1.6 GenomicAlignments_1.32.0 ## [91] AnnotationDbi_1.58.0 memoise_2.0.1 ## [93] ellipsis_0.3.2 interactiveDisplayBase_1.34.0