class: center, middle, inverse, title-slide #
Control de calidad
##
Bioconductor
para datos transcriptómicos de célula única (
scRNA-seq
) –
CDSB2020
###
Leonardo Collado-Torres
### 2020-08-06 --- class: inverse .center[ <a href="https://osca.bioconductor.org/"><img src="https://raw.githubusercontent.com/Bioconductor/OrchestratingSingleCellAnalysis-release/master/images/cover.png" style="width: 30%"/></a> <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>. <a href='https://clustrmaps.com/site/1b5pl' title='Visit tracker'><img src='//clustrmaps.com/map_v2.png?cl=ffffff&w=150&t=n&d=rP3KLyAMuzVNcJFL-_C-B0XnLNVy8Sp6a8HDaKEnSzc'/></a> ] .footnote[Descarga los materiales con `usethis::use_course('comunidadbioinfo/cdsb2020')` o revisalos en línea vía [**comunidadbioinfo.github.io/cdsb2020**](http://comunidadbioinfo.github.io/cdsb2020).] <style type="text/css"> /* From https://github.com/yihui/xaringan/issues/147 */ .scroll-output { height: 80%; overflow-y: scroll; } /* https://stackoverflow.com/questions/50919104/horizontally-scrollable-output-on-xaringan-slides */ pre { max-width: 100%; overflow-x: scroll; } /* From https://github.com/yihui/xaringan/wiki/Font-Size */ .tiny{ font-size: 40% } /* From https://github.com/yihui/xaringan/wiki/Title-slide */ .title-slide { background-image: url(https://raw.githubusercontent.com/Bioconductor/OrchestratingSingleCellAnalysis/master/images/Workflow.png); background-size: 33%; background-position: 0% 100% } </style> --- # Diapositivas de Peter Hickey Ve las diapositivas [aquí](https://docs.google.com/presentation/d/1pIiA7fZd1GBxaKQpzT2sPn7C6fIZxEJ8NI4p3UtoIOo/edit#slide=id.p) --- # Código de R .scroll-output[ ```r ## Datos library('scRNAseq') ``` ``` ## Loading required package: SingleCellExperiment ``` ``` ## Loading required package: SummarizedExperiment ``` ``` ## Loading required package: GenomicRanges ``` ``` ## Loading required package: stats4 ``` ``` ## Loading required package: BiocGenerics ``` ``` ## Loading required package: parallel ``` ``` ## ## Attaching package: 'BiocGenerics' ``` ``` ## The following objects are masked from 'package:parallel': ## ## clusterApply, clusterApplyLB, clusterCall, clusterEvalQ, ## clusterExport, clusterMap, parApply, parCapply, parLapply, ## parLapplyLB, parRapply, parSapply, parSapplyLB ``` ``` ## The following objects are masked from 'package:stats': ## ## IQR, mad, sd, var, xtabs ``` ``` ## The following objects are masked from 'package:base': ## ## anyDuplicated, append, as.data.frame, basename, cbind, colnames, ## dirname, do.call, duplicated, eval, evalq, Filter, Find, get, grep, ## grepl, intersect, is.unsorted, lapply, Map, mapply, match, mget, ## order, paste, pmax, pmax.int, pmin, pmin.int, Position, rank, ## rbind, Reduce, rownames, sapply, setdiff, sort, table, tapply, ## union, unique, unsplit, which, which.max, which.min ``` ``` ## Loading required package: S4Vectors ``` ``` ## ## Attaching package: 'S4Vectors' ``` ``` ## The following object is masked from 'package:base': ## ## expand.grid ``` ``` ## Loading required package: IRanges ``` ``` ## Loading required package: GenomeInfoDb ``` ``` ## Loading required package: Biobase ``` ``` ## Welcome to Bioconductor ## ## Vignettes contain introductory material; view with ## 'browseVignettes()'. To cite Bioconductor, see ## 'citation("Biobase")', and for packages 'citation("pkgname")'. ``` ``` ## Loading required package: DelayedArray ``` ``` ## Loading required package: matrixStats ``` ``` ## ## Attaching package: 'matrixStats' ``` ``` ## The following objects are masked from 'package:Biobase': ## ## anyMissing, rowMedians ``` ``` ## ## Attaching package: 'DelayedArray' ``` ``` ## The following objects are masked from 'package:matrixStats': ## ## colMaxs, colMins, colRanges, rowMaxs, rowMins, rowRanges ``` ``` ## The following objects are masked from 'package:base': ## ## aperm, apply, rowsum ``` ```r sce.416b <- LunSpikeInData(which = "416b") ``` ``` ## snapshotDate(): 2020-04-27 ``` ``` ## see ?scRNAseq and browseVignettes('scRNAseq') for documentation ``` ``` ## loading from cache ``` ``` ## see ?scRNAseq and browseVignettes('scRNAseq') for documentation ``` ``` ## loading from cache ``` ``` ## see ?scRNAseq and browseVignettes('scRNAseq') for documentation ``` ``` ## loading from cache ``` ``` ## snapshotDate(): 2020-04-27 ``` ``` ## loading from cache ``` ``` ## require("ensembldb") ``` ```r sce.416b$block <- factor(sce.416b$block) # Descarga los archivos de anotación de la base de datos de Ensembl # correspondientes usando los recursos disponibles vía AnnotationHub library('AnnotationHub') ``` ``` ## Loading required package: BiocFileCache ``` ``` ## Loading required package: dbplyr ``` ``` ## ## Attaching package: 'AnnotationHub' ``` ``` ## The following object is masked from 'package:Biobase': ## ## cache ``` ```r ah <- AnnotationHub() ``` ``` ## snapshotDate(): 2020-04-27 ``` ```r query(ah, c("Mus musculus", "Ensembl", "v97")) ``` ``` ## AnnotationHub with 1 record ## # snapshotDate(): 2020-04-27 ## # names(): AH73905 ## # $dataprovider: Ensembl ## # $species: Mus musculus ## # $rdataclass: EnsDb ## # $rdatadateadded: 2019-05-02 ## # $title: Ensembl 97 EnsDb for Mus musculus ## # $description: Gene and protein annotations for Mus musculus based on Ensem... ## # $taxonomyid: 10090 ## # $genome: GRCm38 ## # $sourcetype: ensembl ## # $sourceurl: http://www.ensembl.org ## # $sourcesize: NA ## # $tags: c("97", "AHEnsDbs", "Annotation", "EnsDb", "Ensembl", "Gene", ## # "Protein", "Transcript") ## # retrieve record with 'object[["AH73905"]]' ``` ```r # Obtén la posición del cromosoma para cada gen ens.mm.v97 <- ah[["AH73905"]] ``` ``` ## loading from cache ``` ```r location <- mapIds( ens.mm.v97, keys = rownames(sce.416b), keytype = "GENEID", column = "SEQNAME" ) ``` ``` ## Warning: Unable to map 563 of 46604 requested IDs. ``` ```r # Identifica los genes mitocondriales is.mito <- which(location == "MT") library('scater') ``` ``` ## Loading required package: ggplot2 ``` ```r sce.416b <- addPerCellQC(sce.416b, subsets = list(Mito = is.mito)) ``` ] --- # Preguntas -- * ¿Qué cambió en nuestro objeto `sce` después de `addPerCellQC`? -- * Haz una gráfica de _boxplots_ del número de genes por bloque (block) de células. ??? * Ahora tenemos más información en `colData(sce.416b)` * `with(colData(sce.416b), boxplot(detected ~ block))` --- # Gráficas sobre medidas de control de calidad (QC) .scroll-output[ ```r plotColData(sce.416b, x = "block", y = "detected") ``` ![](03-quality-control_files/figure-html/qc_metrics-1.png)<!-- --> ```r plotColData(sce.416b, x = "block", y = "detected") + scale_y_log10() ``` ![](03-quality-control_files/figure-html/qc_metrics-2.png)<!-- --> ```r plotColData(sce.416b, x = "block", y = "detected", other_fields = "phenotype") + scale_y_log10() + facet_wrap( ~ phenotype) ``` ![](03-quality-control_files/figure-html/qc_metrics-3.png)<!-- --> ] --- .scroll-output[ ```r # Valores de límite ejemplo qc.lib <- sce.416b$sum < 100000 qc.nexprs <- sce.416b$detected < 5000 qc.spike <- sce.416b$altexps_ERCC_percent > 10 qc.mito <- sce.416b$subsets_Mito_percent > 10 discard <- qc.lib | qc.nexprs | qc.spike | qc.mito # Obtenemos un resumen del número de células # eliminadas por cada filtro DataFrame( LibSize = sum(qc.lib), NExprs = sum(qc.nexprs), SpikeProp = sum(qc.spike), MitoProp = sum(qc.mito), Total = sum(discard) ) ``` ``` ## DataFrame with 1 row and 5 columns ## LibSize NExprs SpikeProp MitoProp Total ## <integer> <integer> <integer> <integer> <integer> ## 1 3 0 19 14 33 ``` ```r qc.lib2 <- isOutlier(sce.416b$sum, log = TRUE, type = "lower") qc.nexprs2 <- isOutlier(sce.416b$detected, log = TRUE, type = "lower") qc.spike2 <- isOutlier(sce.416b$altexps_ERCC_percent, type = "higher") qc.mito2 <- isOutlier(sce.416b$subsets_Mito_percent, type = "higher") discard2 <- qc.lib2 | qc.nexprs2 | qc.spike2 | qc.mito2 # Extraemos los límites de valores (thresholds) attr(qc.lib2, "thresholds") ``` ``` ## lower higher ## 434082.9 Inf ``` ```r attr(qc.nexprs2, "thresholds") ``` ``` ## lower higher ## 5231.468 Inf ``` ```r # Obtenemos un resumen del número de células # eliminadas por cada filtro DataFrame( LibSize = sum(qc.lib2), NExprs = sum(qc.nexprs2), SpikeProp = sum(qc.spike2), MitoProp = sum(qc.mito2), Total = sum(discard2) ) ``` ``` ## DataFrame with 1 row and 5 columns ## LibSize NExprs SpikeProp MitoProp Total ## <integer> <integer> <integer> <integer> <integer> ## 1 4 0 1 2 6 ``` ```r ## Más pruebas plotColData(sce.416b, x = "block", y = "detected", other_fields = "phenotype") + scale_y_log10() + facet_wrap( ~ phenotype) ``` ![](03-quality-control_files/figure-html/all_code_part2-1.png)<!-- --> ```r batch <- paste0(sce.416b$phenotype, "-", sce.416b$block) qc.lib3 <- isOutlier(sce.416b$sum, log = TRUE, type = "lower", batch = batch) qc.nexprs3 <- isOutlier(sce.416b$detected, log = TRUE, type = "lower", batch = batch) qc.spike3 <- isOutlier(sce.416b$altexps_ERCC_percent, type = "higher", batch = batch) qc.mito3 <- isOutlier(sce.416b$subsets_Mito_percent, type = "higher", batch = batch) discard3 <- qc.lib3 | qc.nexprs3 | qc.spike3 | qc.mito3 # Extraemos los límites de valores (thresholds) attr(qc.lib3, "thresholds") ``` ``` ## induced CBFB-MYH11 oncogene expression-20160113 ## lower 461073.1 ## higher Inf ## induced CBFB-MYH11 oncogene expression-20160325 ## lower 399133.7 ## higher Inf ## wild type phenotype-20160113 wild type phenotype-20160325 ## lower 599794.9 370316.5 ## higher Inf Inf ``` ```r attr(qc.nexprs3, "thresholds") ``` ``` ## induced CBFB-MYH11 oncogene expression-20160113 ## lower 5399.24 ## higher Inf ## induced CBFB-MYH11 oncogene expression-20160325 ## lower 6519.74 ## higher Inf ## wild type phenotype-20160113 wild type phenotype-20160325 ## lower 7215.887 7586.402 ## higher Inf Inf ``` ```r # Obtenemos un resumen del número de células # eliminadas por cada filtro DataFrame( LibSize = sum(qc.lib3), NExprs = sum(qc.nexprs3), SpikeProp = sum(qc.spike3), MitoProp = sum(qc.mito3), Total = sum(discard3) ) ``` ``` ## DataFrame with 1 row and 5 columns ## LibSize NExprs SpikeProp MitoProp Total ## <integer> <integer> <integer> <integer> <integer> ## 1 5 4 6 2 9 ``` ] --- # Preguntas -- * ¿Fue necesario `qc.lib` para crear `discard`? -- * ¿Cúal filtro fue más estricto? ¿`discard` o `discard2`? -- * Al considerar el grupo de cada muestra (batch), ¿descartamos más células usando un valor de límite automático? ??? * Sí, usando `table(qc.lib , qc.spike)` y `table(qc.lib , qc.mito)` * `discard` de `table(discard, discard2)` * Sí, usando `table(discard, discard2, discard3)` --- .scroll-output[ ```r sce.grun <- GrunPancreasData() ``` ``` ## snapshotDate(): 2020-04-27 ``` ``` ## see ?scRNAseq and browseVignettes('scRNAseq') for documentation ``` ``` ## loading from cache ``` ```r sce.grun <- addPerCellQC(sce.grun) plotColData(sce.grun, x = "donor", y = "altexps_ERCC_percent") ``` ``` ## Warning: Removed 10 rows containing non-finite values (stat_ydensity). ``` ``` ## Warning: Removed 10 rows containing missing values (position_quasirandom). ``` ![](03-quality-control_files/figure-html/use_case-1.png)<!-- --> ```r discard.ercc <- isOutlier(sce.grun$altexps_ERCC_percent, type = "higher", batch = sce.grun$donor) ``` ``` ## Warning in isOutlier(sce.grun$altexps_ERCC_percent, type = "higher", batch = ## sce.grun$donor): missing values ignored during outlier detection ``` ```r discard.ercc2 <- isOutlier( sce.grun$altexps_ERCC_percent, type = "higher", batch = sce.grun$donor, subset = sce.grun$donor %in% c("D17", "D2", "D7") ) ``` ``` ## Warning in isOutlier(sce.grun$altexps_ERCC_percent, type = "higher", batch = ## sce.grun$donor, : missing values ignored during outlier detection ``` ```r plotColData( sce.grun, x = "donor", y = "altexps_ERCC_percent", colour_by = data.frame(discard = discard.ercc) ) ``` ``` ## Warning: Removed 10 rows containing non-finite values (stat_ydensity). ## Warning: Removed 10 rows containing missing values (position_quasirandom). ``` ![](03-quality-control_files/figure-html/use_case-2.png)<!-- --> ```r plotColData( sce.grun, x = "donor", y = "altexps_ERCC_percent", colour_by = data.frame(discard = discard.ercc2) ) ``` ``` ## Warning: Removed 10 rows containing non-finite values (stat_ydensity). ## Warning: Removed 10 rows containing missing values (position_quasirandom). ``` ![](03-quality-control_files/figure-html/use_case-3.png)<!-- --> ```r # Agregamos información sobre que células # tienen valores extremos sce.416b$discard <- discard2 # Haz esta gráfica para cada medida de # control de calidad (QC) plotColData( sce.416b, x = "block", y = "sum", colour_by = "discard", other_fields = "phenotype" ) + facet_wrap( ~ phenotype) + scale_y_log10() ``` ![](03-quality-control_files/figure-html/use_case-4.png)<!-- --> ```r # Otra gráfica de diagnóstico útil plotColData( sce.416b, x = "sum", y = "subsets_Mito_percent", colour_by = "discard", other_fields = c("block", "phenotype") ) + facet_grid(block ~ phenotype) ``` ![](03-quality-control_files/figure-html/use_case-5.png)<!-- --> ] --- .scroll-output[ ```r library('BiocFileCache') bfc <- BiocFileCache() raw.path <- bfcrpath( bfc, file.path( "http://cf.10xgenomics.com/samples", "cell-exp/2.1.0/pbmc4k/pbmc4k_raw_gene_bc_matrices.tar.gz" ) ) untar(raw.path, exdir = file.path(tempdir(), "pbmc4k")) library('DropletUtils') library('Matrix') fname <- file.path(tempdir(), "pbmc4k/raw_gene_bc_matrices/GRCh38") sce.pbmc <- read10xCounts(fname, col.names = TRUE) bcrank <- barcodeRanks(counts(sce.pbmc)) # Mostremos solo los puntos únicos para acelerar # el proceso de hacer esta gráfica uniq <- !duplicated(bcrank$rank) plot( bcrank$rank[uniq], bcrank$total[uniq], log = "xy", xlab = "Rank", ylab = "Total UMI count", cex.lab = 1.2 ) ``` ``` ## Warning in xy.coords(x, y, xlabel, ylabel, log): 1 y value <= 0 omitted from ## logarithmic plot ``` ```r abline(h = metadata(bcrank)$inflection, col = "darkgreen", lty = 2) abline(h = metadata(bcrank)$knee, col = "dodgerblue", lty = 2) legend( "bottomleft", legend = c("Inflection", "Knee"), col = c("darkgreen", "dodgerblue"), lty = 2, cex = 1.2 ) ``` ![](03-quality-control_files/figure-html/use_case_pbmc-1.png)<!-- --> ```r set.seed(100) e.out <- emptyDrops(counts(sce.pbmc)) # Revisa ?emptyDrops para una explicación de porque hay valores NA summary(e.out$FDR <= 0.001) ``` ``` ## Mode FALSE TRUE NA's ## logical 1056 4233 731991 ``` ```r set.seed(100) limit <- 100 all.out <- emptyDrops(counts(sce.pbmc), lower = limit, test.ambient = TRUE) # Idealmente, este histograma debería verse uniforme. # Picos grandes cerca de cero indican que los _barcodes_ # con un número total de cuentas menor a "lower" no son # de origen ambiental. hist(all.out$PValue[all.out$Total <= limit & all.out$Total > 0], xlab = "P-value", main = "", col = "grey80") ``` ![](03-quality-control_files/figure-html/use_case_pbmc-2.png)<!-- --> ```r sce.pbmc <- sce.pbmc[, which(e.out$FDR <= 0.001)] is.mito <- grep("^MT-", rowData(sce.pbmc)$Symbol) sce.pmbc <- addPerCellQC(sce.pbmc, subsets = list(MT = is.mito)) discard.mito <- isOutlier(sce.pmbc$subsets_MT_percent, type = "higher") plot( sce.pmbc$sum, sce.pmbc$subsets_MT_percent, log = "x", xlab = "Total count", ylab = "Mitochondrial %" ) abline(h = attr(discard.mito, "thresholds")["higher"], col = "red") ``` ![](03-quality-control_files/figure-html/use_case_pbmc-3.png)<!-- --> ] --- # Ejercicios -- * ¿Por qué `emptyDrops()` regresa valores `NA`? -- * ¿Los valores p son iguales entre `e.out` y `all.out`? -- * ¿Son iguales si obtienes el subconjunto de valores que no son `NA`? ??? * Debajo de `lower` son considerados _droplets_ vacíos. Solo se usan para la correción estadística de pruebas múltiples. * No, debido a los `NA`s. * Sí: `identical(e.out$PValue[!is.na(e.out$FDR)], all.out$PValue[!is.na(e.out$FDR)])` --- ```r # Eliminemos las células de calidad baja # al quedarnos con las columnas del objeto sce que NO # queremos descartar (eso hace el !) filtered <- sce.416b[,!discard2] # Alternativamente, podemos marcar # las células de baja calidad marked <- sce.416b marked$discard <- discard2 ``` -- * ¿Cúal de estos objetos es más grande? -- * ¿Cúal prefieres usar? ??? * `marked` es más grande que `filtered` * Yo prefiero usar `marked` si tengo suficiente memoria para usarlo. --- class: middle .center[ # ¡Gracias! Las diapositivias fueron hechas con el paquete de R [**xaringan**](https://github.com/yihui/xaringan) y configuradas con [**xaringanthemer**](https://github.com/gadenbuie/xaringanthemer). Este curso está basado en el libro [**Orchestrating Single Cell Analysis with Bioconductor**](https://osca.bioconductor.org/) de [Aaron Lun](https://www.linkedin.com/in/aaron-lun-869b5894/), [Robert Amezquita](https://robertamezquita.github.io/), [Stephanie Hicks](https://www.stephaniehicks.com/) y [Raphael Gottardo](http://rglab.org), además del [**curso de scRNA-seq para WEHI**](https://drive.google.com/drive/folders/1cn5d-Ey7-kkMiex8-74qxvxtCQT6o72h) creado por [Peter Hickey](https://www.peterhickey.org/). Puedes encontrar los archivos para este taller en [comunidadbioinfo/cdsb2020](https://github.com/comunidadbioinfo/cdsb2020). Instructor: [**Leonardo Collado-Torres**](http://lcolladotor.github.io/). <a href="https://www.libd.org"><img src="img/LIBD_logo.jpg" style="width: 20%" /></a> ] .footnote[Descarga los materiales con `usethis::use_course('comunidadbioinfo/cdsb2020')` o revisalos en línea vía [**comunidadbioinfo.github.io/cdsb2020**](http://comunidadbioinfo.github.io/cdsb2020).] --- # Detalles de la sesión de R .scroll-output[ .tiny[ ```r options(width = 120) sessioninfo::session_info() ``` ``` ## ─ Session info ─────────────────────────────────────────────────────────────────────────────────────────────────────── ## setting value ## version R version 4.0.2 (2020-06-22) ## os macOS Catalina 10.15.5 ## system x86_64, darwin17.0 ## ui X11 ## language (EN) ## collate en_US.UTF-8 ## ctype en_US.UTF-8 ## tz America/New_York ## date 2020-08-05 ## ## ─ Packages ─────────────────────────────────────────────────────────────────────────────────────────────────────────── ## package * version date lib source ## AnnotationDbi * 1.50.3 2020-07-25 [1] Bioconductor ## AnnotationFilter * 1.12.0 2020-04-27 [1] Bioconductor ## AnnotationHub * 2.20.0 2020-04-27 [1] Bioconductor ## askpass 1.1 2019-01-13 [1] CRAN (R 4.0.0) ## assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.0) ## beeswarm 0.2.3 2016-04-25 [1] CRAN (R 4.0.0) ## Biobase * 2.48.0 2020-04-27 [1] Bioconductor ## BiocFileCache * 1.12.0 2020-04-27 [1] Bioconductor ## BiocGenerics * 0.34.0 2020-04-27 [1] Bioconductor ## BiocManager 1.30.10 2019-11-16 [1] CRAN (R 4.0.0) ## BiocNeighbors 1.6.0 2020-04-27 [1] Bioconductor ## BiocParallel 1.22.0 2020-04-27 [1] Bioconductor ## BiocSingular 1.4.0 2020-04-27 [1] Bioconductor ## BiocVersion 3.11.1 2020-04-07 [1] Bioconductor ## biomaRt 2.44.1 2020-06-17 [1] Bioconductor ## Biostrings 2.56.0 2020-04-27 [1] Bioconductor ## bit 4.0.3 2020-07-30 [1] CRAN (R 4.0.2) ## bit64 4.0.2 2020-07-30 [1] CRAN (R 4.0.2) ## bitops 1.0-6 2013-08-17 [1] CRAN (R 4.0.0) ## blob 1.2.1 2020-01-20 [1] CRAN (R 4.0.0) ## cli 2.0.2 2020-02-28 [1] CRAN (R 4.0.0) ## codetools 0.2-16 2018-12-24 [1] CRAN (R 4.0.2) ## colorout * 1.2-2 2020-03-16 [1] Github (jalvesaq/colorout@726d681) ## colorspace 1.4-1 2019-03-18 [1] CRAN (R 4.0.0) ## crayon 1.3.4 2017-09-16 [1] CRAN (R 4.0.0) ## curl 4.3 2019-12-02 [1] CRAN (R 4.0.0) ## DBI 1.1.0 2019-12-15 [1] CRAN (R 4.0.0) ## dbplyr * 1.4.4 2020-05-27 [1] CRAN (R 4.0.2) ## DelayedArray * 0.14.1 2020-07-14 [1] Bioconductor ## DelayedMatrixStats 1.10.1 2020-07-03 [1] Bioconductor ## digest 0.6.25 2020-02-23 [1] CRAN (R 4.0.0) ## dplyr 1.0.1 2020-07-31 [1] CRAN (R 4.0.2) ## dqrng 0.2.1 2019-05-17 [1] CRAN (R 4.0.0) ## DropletUtils * 1.8.0 2020-04-27 [1] Bioconductor ## edgeR 3.30.3 2020-06-02 [1] Bioconductor ## ellipsis 0.3.1 2020-05-15 [1] CRAN (R 4.0.0) ## ensembldb * 2.12.1 2020-05-06 [1] Bioconductor ## evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.0) ## ExperimentHub 1.14.0 2020-04-27 [1] Bioconductor ## fansi 0.4.1 2020-01-08 [1] CRAN (R 4.0.0) ## fastmap 1.0.1 2019-10-08 [1] CRAN (R 4.0.0) ## generics 0.0.2 2018-11-29 [1] CRAN (R 4.0.0) ## GenomeInfoDb * 1.24.2 2020-06-15 [1] Bioconductor ## GenomeInfoDbData 1.2.3 2020-04-16 [1] Bioconductor ## GenomicAlignments 1.24.0 2020-04-27 [1] Bioconductor ## GenomicFeatures * 1.40.1 2020-07-14 [1] Bioconductor ## GenomicRanges * 1.40.0 2020-04-27 [1] Bioconductor ## ggbeeswarm 0.6.0 2017-08-07 [1] CRAN (R 4.0.0) ## ggplot2 * 3.3.2 2020-06-19 [1] CRAN (R 4.0.2) ## glue 1.4.1 2020-05-13 [1] CRAN (R 4.0.0) ## gridExtra 2.3 2017-09-09 [1] CRAN (R 4.0.0) ## gtable 0.3.0 2019-03-25 [1] CRAN (R 4.0.0) ## HDF5Array 1.16.1 2020-06-16 [1] Bioconductor ## hms 0.5.3 2020-01-08 [1] CRAN (R 4.0.0) ## htmltools 0.5.0 2020-06-16 [1] CRAN (R 4.0.2) ## httpuv 1.5.4 2020-06-06 [1] CRAN (R 4.0.2) ## httr 1.4.2 2020-07-20 [1] CRAN (R 4.0.2) ## interactiveDisplayBase 1.26.3 2020-06-02 [1] Bioconductor ## IRanges * 2.22.2 2020-05-21 [1] Bioconductor ## irlba 2.3.3 2019-02-05 [1] CRAN (R 4.0.0) ## knitr 1.29 2020-06-23 [1] CRAN (R 4.0.0) ## later 1.1.0.1 2020-06-05 [1] CRAN (R 4.0.2) ## lattice 0.20-41 2020-04-02 [1] CRAN (R 4.0.2) ## lazyeval 0.2.2 2019-03-15 [1] CRAN (R 4.0.0) ## lifecycle 0.2.0 2020-03-06 [1] CRAN (R 4.0.0) ## limma 3.44.3 2020-06-12 [1] Bioconductor ## locfit 1.5-9.4 2020-03-25 [1] CRAN (R 4.0.0) ## magrittr 1.5 2014-11-22 [1] CRAN (R 4.0.0) ## Matrix * 1.2-18 2019-11-27 [1] CRAN (R 4.0.2) ## matrixStats * 0.56.0 2020-03-13 [1] CRAN (R 4.0.0) ## memoise 1.1.0 2017-04-21 [1] CRAN (R 4.0.0) ## mime 0.9 2020-02-04 [1] CRAN (R 4.0.0) ## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.0.0) ## openssl 1.4.2 2020-06-27 [1] CRAN (R 4.0.1) ## pillar 1.4.6 2020-07-10 [1] CRAN (R 4.0.2) ## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.0.0) ## prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.0.0) ## progress 1.2.2 2019-05-16 [1] CRAN (R 4.0.0) ## promises 1.1.1 2020-06-09 [1] CRAN (R 4.0.2) ## ProtGenerics 1.20.0 2020-04-27 [1] Bioconductor ## purrr 0.3.4 2020-04-17 [1] CRAN (R 4.0.0) ## R.methodsS3 1.8.0 2020-02-14 [1] CRAN (R 4.0.0) ## R.oo 1.23.0 2019-11-03 [1] CRAN (R 4.0.0) ## R.utils 2.9.2 2019-12-08 [1] CRAN (R 4.0.0) ## R6 2.4.1 2019-11-12 [1] CRAN (R 4.0.0) ## rappdirs 0.3.1 2016-03-28 [1] CRAN (R 4.0.0) ## Rcpp 1.0.5 2020-07-06 [1] CRAN (R 4.0.2) ## RCurl 1.98-1.2 2020-04-18 [1] CRAN (R 4.0.0) ## rhdf5 2.32.2 2020-07-03 [1] Bioconductor ## Rhdf5lib 1.10.1 2020-07-09 [1] Bioconductor ## rlang 0.4.7 2020-07-09 [1] CRAN (R 4.0.2) ## rmarkdown 2.3 2020-06-18 [1] CRAN (R 4.0.0) ## Rsamtools 2.4.0 2020-04-27 [1] Bioconductor ## RSQLite 2.2.0 2020-01-07 [1] CRAN (R 4.0.0) ## rstudioapi 0.11 2020-02-07 [1] CRAN (R 4.0.0) ## rsvd 1.0.3 2020-02-17 [1] CRAN (R 4.0.0) ## rtracklayer 1.48.0 2020-04-27 [1] Bioconductor ## S4Vectors * 0.26.1 2020-05-16 [1] Bioconductor ## scales 1.1.1 2020-05-11 [1] CRAN (R 4.0.0) ## scater * 1.16.2 2020-06-26 [1] Bioconductor ## scRNAseq * 2.2.0 2020-05-07 [1] Bioconductor ## sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.0.2) ## shiny 1.5.0 2020-06-23 [1] CRAN (R 4.0.2) ## showtext 0.8-1 2020-05-25 [1] CRAN (R 4.0.2) ## showtextdb 3.0 2020-06-04 [1] CRAN (R 4.0.2) ## SingleCellExperiment * 1.10.1 2020-04-28 [1] Bioconductor ## stringi 1.4.6 2020-02-17 [1] CRAN (R 4.0.0) ## stringr 1.4.0 2019-02-10 [1] CRAN (R 4.0.0) ## SummarizedExperiment * 1.18.2 2020-07-14 [1] Bioconductor ## sysfonts 0.8.1 2020-05-08 [1] CRAN (R 4.0.0) ## tibble 3.0.3 2020-07-10 [1] CRAN (R 4.0.2) ## tidyselect 1.1.0 2020-05-11 [1] CRAN (R 4.0.2) ## vctrs 0.3.2 2020-07-15 [1] CRAN (R 4.0.2) ## vipor 0.4.5 2017-03-22 [1] CRAN (R 4.0.0) ## viridis 0.5.1 2018-03-29 [1] CRAN (R 4.0.0) ## viridisLite 0.3.0 2018-02-01 [1] CRAN (R 4.0.0) ## whisker 0.4 2019-08-28 [1] CRAN (R 4.0.0) ## withr 2.2.0 2020-04-20 [1] CRAN (R 4.0.0) ## xaringan 0.16 2020-03-31 [1] CRAN (R 4.0.0) ## xaringanthemer * 0.3.0 2020-05-04 [1] CRAN (R 4.0.0) ## xfun 0.16 2020-07-24 [1] CRAN (R 4.0.2) ## XML 3.99-0.5 2020-07-23 [1] CRAN (R 4.0.2) ## xtable 1.8-4 2019-04-21 [1] CRAN (R 4.0.0) ## XVector 0.28.0 2020-04-27 [1] Bioconductor ## yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.0) ## zlibbioc 1.34.0 2020-04-27 [1] Bioconductor ## ## [1] /Library/Frameworks/R.framework/Versions/4.0/Resources/library ## [2] /Library/Frameworks/R.framework/Versions/4.0branch/Resources/library ``` ]]