Chapter 5 The AnVIL R / Bioconductor package
In this section we learn about
- Saving data to the current runtime
- Saving or retrieving data from the workspace bucket
- Manipulating the ‘TABLES’ metadata
- ‘Power-user’ access to the underlying AnVIL software components
Packages used include
- AnVIL – access AnVIL and Google cloud resources from within
R. The
AnVIL
package is under active development, and we use the most recent version installed from Github.
5.1 R / Bioconductor libraries
We’ll primarily use the AnVIL
package, installed from github.
github_packages <- "Bioconductor/AnVIL"
idx <- ! basename(github_packages) %in% rownames(installed.packages())
need <- github_packages[ idx ]
BiocManager::install(need, update = FALSE)
## Bioconductor version 3.11 (BiocManager 1.30.10), R 4.0.2 Patched (2020-06-24
## r78747)
We’ll motivate the use of AnVIL
using a previous work flow, and use
of the dplyr
package. The required packages can be installed with
packages <- c("scRNAseq", "scater", "scran", "dplyr")
need <- packages[!packages %in% rownames(installed.packages())]
BiocManager::install(need, update = FALSE)
## Bioconductor version 3.11 (BiocManager 1.30.10), R 4.0.2 Patched (2020-06-24
## r78747)
Start by loading the AnVIL
package.
5.2 The AnVIL workspace
The central components of the AnVIL workspace are available. Each workspace has a ‘namespace’ (billing account) and ‘name’ (workspace name).
Each workspace has a google ‘bucket’ associated with it. The bucket is in existence for as long as the workspace, providing an area for persistent data storage across different kernels.
## [1] "gs://fc-66b30014-b9a7-4374-a24a-e9eba924b67d"
5.3 Saving analysis products
5.3.1 An abbreviated work flow
Here’s an abbreviated version of an earlier work flow
## Necessary packages
suppressPackageStartupMessages({
library(scRNAseq)
library(scater)
library(scran)
})
## Pre-configured data
suppressMessages({
sce <- MacoskoRetinaData()
})
## QC
is.mito <- grepl("^MT-", rownames(sce))
qcstats <- perCellQCMetrics(sce, subsets=list(Mito=is.mito))
filtered <- quickPerCellQC(qcstats, percent_subsets="subsets_Mito_percent")
sce <- sce[, !filtered$discard]
## Normalization
sce <- logNormCounts(sce)
## Filtering
dec <- modelGeneVar(sce)
hvg <- getTopHVGs(dec, prop=0.1)
## Dimensionality reduction
set.seed(1234)
sce <- runPCA(sce, ncomponents=25, subset_row=hvg)
sce <- runUMAP(sce, dimred = 'PCA', external_neighbors=TRUE)
## Clustering
g <- buildSNNGraph(sce, use.dimred = 'PCA')
colLabels(sce) <- factor(igraph::cluster_louvain(g)$membership)
5.3.2 Saving results on the runtime instance
At this point, we’ve invested a certain amount of effort, mental and
computational, into producing the updated sce
. It might be valuable
to save this object so that we can quickly read it in during our next
session.
The standard mechanism for saving an R object might use saveRDS()
to write the image to disk, and readRDS()
to load it back in:
## save the file in a temporary directory, for illustration purposes
tmp_dir <- tempfile(); dir.create(tmp_dir)
file_name <- file.path(tmp_dir, format(Sys.Date(), "sce_%m-%d-%y.RDS"))
saveRDS(sce, file_name)
sce1 <- readRDS(file_name)
sce1
## class: SingleCellExperiment
## dim: 24658 45877
## metadata(0):
## assays(2): counts logcounts
## rownames(24658): KITL TMTC3 ... 1110059M19RIK GM20861
## rowData names(0):
## colnames(45877): r1_GGCCGCAGTCCG r1_CTTGTGCGGGAA ... p1_TAACGCGCTCCT
## p1_ATTCTTGTTCTT
## colData names(4): cell.id cluster sizeFactor label
## reducedDimNames(2): PCA UMAP
## altExpNames(0):
5.3.3 Backing up results to the workspace bucket
A challenge with this approach is that the file system is associated with the runtime. When the runtime ends, intentionally (e.g., to switch to a different runtime) or accidentally (e.g., because of some technical problem in the AnVIL), the file is no longer available.
To make ‘persist’ the file so that its lifespan extends to the life of
the workspace, copy the file from it’s current location to the
google bucket associated with the workspace. Do this using
avfiles_backup()
(res
contains the output of the cloud copy
command, and would be useful if debugging a surprising outcome).
The content of the google bucket can be viewed with
## [1] "sce_07-17-20.RDS"
## [2] "notebooks/03-existing-workspace.ipynb"
## [3] "notebooks/04-hca-cloud-R.ipynb"
## [4] "notebooks/05-AnVIL-package.ipynb"
We see that the data set, and the notebooks, are stored in the bucket. The file can be restored to the runtime, perhaps in a different location, with
## character(0)
## [1] "sce_07-17-20.RDS"
This restoration works even if the runtime has been changed, e.g., to use RStudio instead of Jupyter notebooks.
5.4 Workspace DATA ‘TABLES’
Check out the DATA tab on the workspace home page. Note that there is a TABLES entry. A Workspace data TABLE provides metadata about genome-scale resources available to the workspace. Often, the data are subject to access restrictions, and access to the workspace implies access to the restricted data.
We’ll create references to public-access data available from the Human Cell Atlas.
5.4.1 Metadata discovery and export from the HCA
Visit the Human Cell Atlas Data Portal.
Select on the project “A single-cell reference map of transcriptional states for human blood and tissue T cell activation” (second item on the default screen, as of this writing). Note that the data set is very well documented. We worked with the ‘Expression Matrices’ (left panel) in a previous section of the workshop, and will work with ‘Analysis Protocol (optimus_v1.3.5)’ (right sidebar) in a subsequent section.
Return to the data portal. Use the check box to select the project, and click ‘Export Selected Data’ toward the top right.
On the next screen, choose ‘Export to Terra’, select ‘BAM’ files, and ‘Request Export’
I was transferred to Terra, asked to log in, then to create or use a workspace. I chose an existing workspace (this one!). The HCA data appeared under the DATA tab as a TABLE labeled “participants”.
The AnVIL package allow us to query the workspace data tables.
5.4.2 Accessing TABLES
Use avtables()
to discover the tables available.
## # A tibble: 1 x 3
## table count colnames
## <chr> <int> <chr>
## 1 participa… 16 participant_id, bundle_uuid, bundle_version, cell_suspension…
Use avtable()
to retrieve a particular table.
## # A tibble: 16 x 121
## name `__unknown_3__f… `__csv__file_na… `__unknown_4__f… donor_organism_…
## <chr> <chr> <chr> <chr> <chr>
## 1 09ce… unknown empty_drops_res… 60921956ce081e3… 95822e01-44a7-4…
## 2 0cba… unknown empty_drops_res… bf8fbfd77dc4dfe… b09a1e10-3c38-4…
## 3 24cf… unknown empty_drops_res… 00ccbe66273c95e… 95822e01-44a7-4…
## 4 2677… unknown empty_drops_res… 4cc66da5a4279cd… 8b5774b2-2aba-4…
## 5 269c… unknown empty_drops_res… 823bb11d2b3d5f8… 8b5774b2-2aba-4…
## 6 6aeb… unknown empty_drops_res… 004b9ce987100ed… 8b5774b2-2aba-4…
## 7 88f0… unknown empty_drops_res… 3fb281d48b034bc… 8b5774b2-2aba-4…
## 8 8b9e… unknown empty_drops_res… 048b463622830aa… 8b5774b2-2aba-4…
## 9 8c6e… unknown empty_drops_res… b55f255b6892ab4… 95822e01-44a7-4…
## 10 9137… unknown empty_drops_res… bdcac1fa24a6af8… 95822e01-44a7-4…
## 11 a460… unknown empty_drops_res… aed8ac6e3611608… 95822e01-44a7-4…
## 12 c4dc… unknown empty_drops_res… 91248e040be8119… b09a1e10-3c38-4…
## 13 c5df… unknown empty_drops_res… 872c8366048261e… 8b5774b2-2aba-4…
## 14 cfa6… unknown empty_drops_res… 351bf8067ef3b42… 4b7a3de7-94db-4…
## 15 dde6… unknown empty_drops_res… bd41fb241c3b618… 95822e01-44a7-4…
## 16 ecbc… unknown empty_drops_res… a0598691e0a040f… 4b7a3de7-94db-4…
## # … with 116 more variables: `__unknown_3__file_sha256` <chr>,
## # `__fastq_read2__file_sha256` <chr>, `__unknown_0__file_size` <chr>,
## # `__fastq_read2__drs_url` <chr>, `__unknown_0__file_sha256` <chr>,
## # `__csv__drs_url` <chr>, `__fastq_read2__file_format` <chr>,
## # `__unknown_1__file_version` <chr>, `__fastq_read2__file_name` <chr>,
## # cell_suspension__estimated_cell_count <chr>, `__unknown_4__drs_url` <chr>,
## # `__bam__file_url` <chr>, `__unknown_2__file_uuid` <chr>,
## # `__unknown_3__file_name` <chr>, `__unknown_1__file_content_type` <chr>,
## # `__unknown_0__file_version` <chr>, `__bam__file_sha256` <chr>,
## # `__csv__file_sha256` <chr>, `__bam__file_version` <chr>,
## # cell_suspension__selected_cell_type <chr>,
## # `__fastq_read1__file_name` <chr>,
## # sequencing_process__provenance__document_id <chr>,
## # `__matrix__file_content_type` <chr>,
## # `__unknown_3__file_content_type` <chr>,
## # specimen_from_organism__provenance__document_id <chr>,
## # project__contributors__laboratory <chr>, `__matrix__file_name` <chr>,
## # sequencing_protocol__paired_end <chr>, `__unknown_4__file_format` <chr>,
## # `__unknown_2__file_format` <chr>, `__unknown_4__file_uuid` <chr>,
## # `__unknown_1__file_name` <chr>, sample__provenance__document_id <chr>,
## # `_entity_type` <chr>, `__unknown_0__drs_url` <chr>,
## # `__fastq_read2__file_version` <chr>, `__bam__file_content_type` <chr>,
## # `__unknown_0__file_format` <chr>, `__fastq_read1__file_size` <chr>,
## # donor_organism__organism_age <chr>, `__unknown_1__file_uuid` <chr>,
## # project__project_core__project_short_name <chr>,
## # `__unknown_2__file_url` <chr>, donor_organism__diseases <chr>,
## # bundle_version <chr>, `__csv__file_uuid` <chr>,
## # `__unknown_4__file_content_type` <chr>,
## # library_preparation_protocol__library_construction_approach <chr>,
## # `__matrix__drs_url` <chr>, `__bam__file_uuid` <chr>,
## # `__unknown_4__file_version` <chr>, `__unknown_0__file_url` <chr>,
## # `__fastq_read2__file_content_type` <chr>, `__bam__file_size` <chr>,
## # `__matrix__file_url` <chr>, `__unknown_2__file_sha256` <chr>,
## # `__fastq_read2__read_index` <chr>, `__csv__file_version` <chr>,
## # `__matrix__file_version` <chr>, `__bam__drs_url` <chr>,
## # `__csv__file_format` <chr>,
## # sequencing_protocol__instrument_manufacturer_model <chr>,
## # `__fastq_read1__file_content_type` <chr>, `__unknown_3__file_uuid` <chr>,
## # bundle_uuid <chr>, project__provenance__document_id <chr>,
## # cell_suspension__provenance__document_id <chr>,
## # `__unknown_3__file_size` <chr>, `__unknown_3__file_version` <chr>,
## # `__unknown_4__file_size` <chr>, `__unknown_2__file_name` <chr>,
## # sample__biomaterial_core__biomaterial_id <chr>,
## # `__fastq_read1__file_format` <chr>, donor_organism__sex <chr>,
## # `__unknown_4__file_name` <chr>, `__unknown_0__file_name` <chr>,
## # `__fastq_read1__file_sha256` <chr>, `__matrix__file_sha256` <chr>,
## # `__matrix__file_format` <chr>, donor_organism__genus_species <chr>,
## # `__unknown_2__drs_url` <chr>, `__unknown_1__file_size` <chr>,
## # `__fastq_read1__file_version` <chr>, `__unknown_3__drs_url` <chr>,
## # `__unknown_3__file_url` <chr>, project__project_core__project_title <chr>,
## # `__fastq_read1__read_index` <chr>, `__fastq_read2__file_size` <chr>,
## # `__matrix__file_size` <chr>, `__fastq_read1__file_uuid` <chr>,
## # `__unknown_1__file_format` <chr>, `__unknown_1__file_url` <chr>,
## # `__csv__file_size` <chr>,
## # specimen_from_organism__preservation_storage__preservation_method <chr>,
## # `__unknown_2__file_content_type` <chr>, `__bam__file_format` <chr>,
## # donor_organism__biomaterial_core__biomaterial_id <chr>,
## # `__bam__file_name` <chr>, `__unknown_1__file_sha256` <chr>,
## # `__unknown_1__drs_url` <chr>, …
5.4.3 What do we learn about the samples in this experiment?
Metadata about the participants in the study can be found by selecting the columns that do not start with an underscore
## # A tibble: 16 x 28
## name donor_organism_… cell_suspension… cell_suspension… sequencing_proc…
## <chr> <chr> <chr> <chr> <chr>
## 1 09ce… 95822e01-44a7-4… 0 T cell 294fe5d9-c1e8-4…
## 2 0cba… b09a1e10-3c38-4… 0 T cell bfbf2ca6-13e5-4…
## 3 24cf… 95822e01-44a7-4… 0 T cell a040dae6-e0b1-4…
## 4 2677… 8b5774b2-2aba-4… 0 T cell d6536459-ab4e-4…
## 5 269c… 8b5774b2-2aba-4… 0 T cell 58cf25fd-440a-4…
## 6 6aeb… 8b5774b2-2aba-4… 0 T cell 098cc66a-d806-4…
## 7 88f0… 8b5774b2-2aba-4… 0 T cell c76d90b8-c190-4…
## 8 8b9e… 8b5774b2-2aba-4… 0 T cell c763f679-e13d-4…
## 9 8c6e… 95822e01-44a7-4… 0 T cell 58a18a4c-5423-4…
## 10 9137… 95822e01-44a7-4… 0 T cell 36ca61c4-9752-4…
## 11 a460… 95822e01-44a7-4… 0 T cell 6fcd2c86-76dc-4…
## 12 c4dc… b09a1e10-3c38-4… 0 T cell 219e1b92-9749-4…
## 13 c5df… 8b5774b2-2aba-4… 0 T cell fcbaa3c6-b2bf-4…
## 14 cfa6… 4b7a3de7-94db-4… 0 T cell 24ae6c0b-d147-4…
## 15 dde6… 95822e01-44a7-4… 0 T cell fb72f4c2-7f35-4…
## 16 ecbc… 4b7a3de7-94db-4… 0 T cell 3ddf143f-36bd-4…
## # … with 23 more variables:
## # specimen_from_organism__provenance__document_id <chr>,
## # project__contributors__laboratory <chr>,
## # sequencing_protocol__paired_end <chr>,
## # sample__provenance__document_id <chr>, donor_organism__organism_age <chr>,
## # project__project_core__project_short_name <chr>,
## # donor_organism__diseases <chr>, bundle_version <chr>,
## # library_preparation_protocol__library_construction_approach <chr>,
## # sequencing_protocol__instrument_manufacturer_model <chr>,
## # bundle_uuid <chr>, project__provenance__document_id <chr>,
## # cell_suspension__provenance__document_id <chr>,
## # sample__biomaterial_core__biomaterial_id <chr>, donor_organism__sex <chr>,
## # donor_organism__genus_species <chr>,
## # project__project_core__project_title <chr>,
## # specimen_from_organism__preservation_storage__preservation_method <chr>,
## # donor_organism__biomaterial_core__biomaterial_id <chr>,
## # specimen_from_organism__organ_part <chr>,
## # donor_organism__organism_age_unit <chr>,
## # project__contributors__institution <chr>,
## # specimen_from_organism__organ <chr>
As in a previous exercise, we can select the invariant columns to learn about experiment-wide participant descriptions…
participant %>%
select( !starts_with("_") ) %>%
select_if( ~ length(unique(.)) == 1L) %>%
distinct() %>%
tidyr::pivot_longer(everything()) %>%
print()
## # A tibble: 14 x 2
## name value
## <chr> <chr>
## 1 cell_suspension__estimated_cell_co… 0
## 2 cell_suspension__selected_cell_type T cell
## 3 project__contributors__laboratory Farber Lab; Columbia Center for Translat…
## 4 sequencing_protocol__paired_end False
## 5 project__project_core__project_sho… HumanTissueTcellActivation
## 6 library_preparation_protocol__libr… 10X v2 sequencing
## 7 sequencing_protocol__instrument_ma… Illumina HiSeq 4000
## 8 project__provenance__document_id 4a95101c-9ffc-4f30-a809-f04518a23803
## 9 donor_organism__sex male
## 10 donor_organism__genus_species Homo sapiens
## 11 project__project_core__project_tit… A single-cell reference map of transcrip…
## 12 specimen_from_organism__preservati… fresh
## 13 donor_organism__organism_age_unit year
## 14 project__contributors__institution Columbia University Irving Medical Cente…
The varying columns…
## # A tibble: 16 x 14
## name donor_organism_… sequencing_proc… specimen_from_o… sample__provena…
## <chr> <chr> <chr> <chr> <chr>
## 1 09ce… 95822e01-44a7-4… 294fe5d9-c1e8-4… c9abc146-67f0-4… c9abc146-67f0-4…
## 2 0cba… b09a1e10-3c38-4… bfbf2ca6-13e5-4… 0ec78ea7-1fc1-4… 0ec78ea7-1fc1-4…
## 3 24cf… 95822e01-44a7-4… a040dae6-e0b1-4… ed854de5-c872-4… ed854de5-c872-4…
## 4 2677… 8b5774b2-2aba-4… d6536459-ab4e-4… dfe889d8-86c0-4… dfe889d8-86c0-4…
## 5 269c… 8b5774b2-2aba-4… 58cf25fd-440a-4… c2fed28d-cdd4-4… c2fed28d-cdd4-4…
## 6 6aeb… 8b5774b2-2aba-4… 098cc66a-d806-4… a3c3f746-aa00-4… a3c3f746-aa00-4…
## 7 88f0… 8b5774b2-2aba-4… c76d90b8-c190-4… 427e0abb-3d3e-4… 427e0abb-3d3e-4…
## 8 8b9e… 8b5774b2-2aba-4… c763f679-e13d-4… 55c59b93-6ce2-4… 55c59b93-6ce2-4…
## 9 8c6e… 95822e01-44a7-4… 58a18a4c-5423-4… 9a79497c-a825-4… 9a79497c-a825-4…
## 10 9137… 95822e01-44a7-4… 36ca61c4-9752-4… 85a0036b-fb11-4… 85a0036b-fb11-4…
## 11 a460… 95822e01-44a7-4… 6fcd2c86-76dc-4… 59a13e80-0c0b-4… 59a13e80-0c0b-4…
## 12 c4dc… b09a1e10-3c38-4… 219e1b92-9749-4… 46cbd6a3-1ba4-4… 46cbd6a3-1ba4-4…
## 13 c5df… 8b5774b2-2aba-4… fcbaa3c6-b2bf-4… d02c3fdd-5c85-4… d02c3fdd-5c85-4…
## 14 cfa6… 4b7a3de7-94db-4… 24ae6c0b-d147-4… edd28ba8-0bb3-4… edd28ba8-0bb3-4…
## 15 dde6… 95822e01-44a7-4… fb72f4c2-7f35-4… ef3a770b-6bd5-4… ef3a770b-6bd5-4…
## 16 ecbc… 4b7a3de7-94db-4… 3ddf143f-36bd-4… 03a73511-bdeb-4… 03a73511-bdeb-4…
## # … with 9 more variables: donor_organism__organism_age <chr>,
## # donor_organism__diseases <chr>, bundle_version <chr>, bundle_uuid <chr>,
## # cell_suspension__provenance__document_id <chr>,
## # sample__biomaterial_core__biomaterial_id <chr>,
## # donor_organism__biomaterial_core__biomaterial_id <chr>,
## # specimen_from_organism__organ_part <chr>,
## # specimen_from_organism__organ <chr>
Details of, e.g., donor attributes are easily discovered
donor <-
participant %>%
select( starts_with("donor_organism__") ) %>%
## for visual display, drop the 'donor_organism__' prefix
rename_all( ~ sub("donor_organism__", "", .) )
donor %>%
dplyr::count(
provenance__document_id,
sex,
organism_age
) %>%
print()
## # A tibble: 4 x 4
## provenance__document_id sex organism_age n
## <chr> <chr> <chr> <int>
## 1 4b7a3de7-94db-4507-b1f9-c3931f9f3aa5 male 50-55 2
## 2 8b5774b2-2aba-4b90-8fa0-c7f69207802c male 65 6
## 3 95822e01-44a7-420b-92fc-b001460b1d13 male 52 6
## 4 b09a1e10-3c38-4bb3-8553-d762810a6fb7 male 50-55 2
The ‘big data’ (e.g., BAM files) are co-located in the google cloud
(note the replica=gcp
, i.e., Google cloud platform, at the end of
the URL), so accessible for computation and without download charge.
## # A tibble: 16 x 1
## `__bam__file_url`
## <chr>
## 1 https://dss.data.humancellatlas.org/v1/files/4ad1cc30-98e2-4db1-a303-20fb297…
## 2 https://dss.data.humancellatlas.org/v1/files/9af75eda-79b9-48b8-a29b-2d162cf…
## 3 https://dss.data.humancellatlas.org/v1/files/47d4aee5-06e9-4821-badf-08155c9…
## 4 https://dss.data.humancellatlas.org/v1/files/b8c092c8-4a89-45b6-bed3-4cc2bb5…
## 5 https://dss.data.humancellatlas.org/v1/files/cdb319d6-bd03-4984-a94d-c8bb3d6…
## 6 https://dss.data.humancellatlas.org/v1/files/048541ec-503a-48a0-85f8-58eba00…
## 7 https://dss.data.humancellatlas.org/v1/files/8424fdb4-c168-4cac-85d8-59694be…
## 8 https://dss.data.humancellatlas.org/v1/files/896605ca-71e8-449a-8cc4-1dd8bf0…
## 9 https://dss.data.humancellatlas.org/v1/files/b6b7f5a1-3f4b-4d88-8f1e-0f682b5…
## 10 https://dss.data.humancellatlas.org/v1/files/50897f4d-a010-4626-9547-92b8eaa…
## 11 https://dss.data.humancellatlas.org/v1/files/b9fa1e76-4999-4358-a18b-9b2cee2…
## 12 https://dss.data.humancellatlas.org/v1/files/ab102f17-5045-4b69-9cd3-2b22ca4…
## 13 https://dss.data.humancellatlas.org/v1/files/87a84844-349c-4463-8c0b-6aa22b1…
## 14 https://dss.data.humancellatlas.org/v1/files/f97266be-5f00-48de-b0cf-a3528fb…
## 15 https://dss.data.humancellatlas.org/v1/files/2802b4ef-88d0-4283-8d92-a2573eb…
## 16 https://dss.data.humancellatlas.org/v1/files/b04813fc-ac15-4fbb-8f14-9d8796a…
5.5 Information about the packages used in this session
The R command sessionInfo()
captures information about the
versions of software used in the current session. This can be valuable
for performing reproducible analysis.
## R version 4.0.2 Patched (2020-06-24 r78747)
## Platform: x86_64-apple-darwin17.7.0 (64-bit)
## Running under: macOS High Sierra 10.13.6
##
## Matrix products: default
## BLAS: /Users/ma38727/bin/R-4-0-branch/lib/libRblas.dylib
## LAPACK: /Users/ma38727/bin/R-4-0-branch/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] parallel stats4 stats graphics grDevices utils datasets
## [8] methods base
##
## other attached packages:
## [1] AnVIL_1.1.14 dplyr_1.0.0
## [3] LoomExperiment_1.6.0 rtracklayer_1.48.0
## [5] rhdf5_2.32.2 BiocFileCache_1.12.0
## [7] dbplyr_1.4.4 scran_1.16.0
## [9] scater_1.16.2 ggplot2_3.3.2
## [11] scRNAseq_2.2.0 SingleCellExperiment_1.10.1
## [13] SummarizedExperiment_1.18.2 DelayedArray_0.14.1
## [15] matrixStats_0.56.0 Biobase_2.48.0
## [17] GenomicRanges_1.40.0 GenomeInfoDb_1.24.2
## [19] IRanges_2.22.2 S4Vectors_0.26.1
## [21] BiocGenerics_0.34.0
##
## loaded via a namespace (and not attached):
## [1] ggbeeswarm_0.6.0 colorspace_1.4-1
## [3] ellipsis_0.3.1 futile.logger_1.4.3
## [5] XVector_0.28.0 BiocNeighbors_1.6.0
## [7] rstudioapi_0.11 farver_2.0.3
## [9] bit64_0.9-7.1 interactiveDisplayBase_1.26.3
## [11] AnnotationDbi_1.50.1 fansi_0.4.1
## [13] knitr_1.29 jsonlite_1.7.0
## [15] Rsamtools_2.4.0 shiny_1.5.0
## [17] HDF5Array_1.16.1 BiocManager_1.30.10
## [19] compiler_4.0.2 httr_1.4.1
## [21] dqrng_0.2.1 assertthat_0.2.1
## [23] Matrix_1.2-18 fastmap_1.0.1
## [25] limma_3.44.3 cli_2.0.2
## [27] formatR_1.7 later_1.1.0.1
## [29] BiocSingular_1.4.0 htmltools_0.5.0
## [31] tools_4.0.2 rsvd_1.0.3
## [33] igraph_1.2.5 gtable_0.3.0
## [35] glue_1.4.1 GenomeInfoDbData_1.2.3
## [37] rappdirs_0.3.1 rapiclient_0.1.3
## [39] Rcpp_1.0.5 vctrs_0.3.2
## [41] Biostrings_2.56.0 ExperimentHub_1.14.0
## [43] DelayedMatrixStats_1.10.1 xfun_0.15
## [45] stringr_1.4.0 mime_0.9
## [47] lifecycle_0.2.0 irlba_2.3.3
## [49] statmod_1.4.34 XML_3.99-0.4
## [51] AnnotationHub_2.20.0 edgeR_3.30.3
## [53] zlibbioc_1.34.0 scales_1.1.1
## [55] promises_1.1.1 lambda.r_1.2.4
## [57] yaml_2.2.1 curl_4.3
## [59] memoise_1.1.0 gridExtra_2.3
## [61] stringi_1.4.6 RSQLite_2.2.0
## [63] BiocVersion_3.11.1 BiocParallel_1.22.0
## [65] rlang_0.4.7 pkgconfig_2.0.3
## [67] bitops_1.0-6 evaluate_0.14
## [69] lattice_0.20-41 purrr_0.3.4
## [71] Rhdf5lib_1.10.1 GenomicAlignments_1.24.0
## [73] labeling_0.3 cowplot_1.0.0
## [75] bit_1.1-15.2 tidyselect_1.1.0
## [77] magrittr_1.5 bookdown_0.20
## [79] R6_2.4.1 generics_0.0.2
## [81] DBI_1.1.0 pillar_1.4.6
## [83] withr_2.2.0 RCurl_1.98-1.2
## [85] tibble_3.0.3 crayon_1.3.4
## [87] futile.options_1.0.1 utf8_1.1.4
## [89] rmarkdown_2.3 viridis_0.5.1
## [91] locfit_1.5-9.4 grid_4.0.2
## [93] blob_1.2.1 digest_0.6.25
## [95] xtable_1.8-4 tidyr_1.1.0
## [97] httpuv_1.5.4 munsell_0.5.0
## [99] beeswarm_0.2.3 viridisLite_0.3.0
## [101] vipor_0.4.5