Abstract

Example usage of the hancock package demonstrated using example data sets.

Compiled date: 2020-06-01

Last edited: 2018-03-08

License: MIT + file LICENSE

Overview

The goal of the hancock package is to provide a collection of methods for learning and applying gene signatures associated with cellular phenotypes and identities. Particular focus is given to single-cell data stored in objects derived from the SummarizedExperiment class.

Getting started

Setup

To run an analysis, the first step is to start R and load the hancock package:

library(hancock)

Example data set

In this example, we use count data for 2,700 peripheral blood mononuclear cells (PBMC) obtained using the 10X Genomics platform.

First, we fetch the data as a SingleCellExperiment object using the TENxPBMCData package. The first time that the following code chunk is run, users should expect it to take additional time as it downloads data from the web and caches it on their local machine; subsequent evaluations of the same code chunk should only take a few seconds as the data set is then loaded from the local cache.

library(TENxPBMCData)
tenx_pbmc3k <- TENxPBMCData(dataset="pbmc3k")
tenx_pbmc3k
#> class: SingleCellExperiment 
#> dim: 32738 2700 
#> metadata(0):
#> assays(1): counts
#> rownames(32738): ENSG00000243485 ENSG00000237613 ... ENSG00000215616
#>   ENSG00000215611
#> rowData names(3): ENSEMBL_ID Symbol_TENx Symbol
#> colnames: NULL
#> colData names(11): Sample Barcode ... Individual Date_published
#> reducedDimNames(0):
#> altExpNames(0):

To enter more rapidly into the subject of learning and applying gene signatures, we provide the cluster assignment of cells produced by the Guided Clustering Tutorial of the Seurat package.

colnames(tenx_pbmc3k) <- paste0("Cell", seq_len(ncol(tenx_pbmc3k)))
ident <- readRDS(system.file(package = "hancock", "extdata", "pbmc3k.ident.rds"))
tenx_pbmc3k <- tenx_pbmc3k[, names(ident)]
tenx_pbmc3k$seurat.ident <- ident
table(tenx_pbmc3k$seurat.ident)
#> 
#>    0    1    2    3    4    5    6    7 
#> 1151  479  342  308  157  155   32   14

In addition, we store manually curated cell type annotations in the "seurat.celltype" cell metadata. Those will be used below to learn signatures associated with well characterized cell populations.

tenx_pbmc3k$seurat.celltype <- factor(tenx_pbmc3k$seurat.ident, labels = c(
    "CD4 T cells", "CD14+ Monocytes", "B cells", "CD8 T cells",
    "FCGR3A+ Monocytes", "NK cells", "Dendritic Cells", "Megakaryocytes"
))
table(tenx_pbmc3k$seurat.celltype)
#> 
#>       CD4 T cells   CD14+ Monocytes           B cells       CD8 T cells 
#>              1151               479               342               308 
#> FCGR3A+ Monocytes          NK cells   Dendritic Cells    Megakaryocytes 
#>               157               155                32                14

Learning signatures

In order to find markers that discriminate subsets of cells from each other, learning methods typically require prior clustering information. In SingleCellExperiment objects, this information is easily stored as a factor in a column of the colData slot.

For instance, the learning method "PositiveProportionDifference" can be applied to identify markers for a set of cell populations. In particular, this method offers a variety of filters on individual markers (e.g., minimal difference in detection rate between the target cluster and any other cluster), and on the combined set of markers (e.g., minimal proportion of cells in the target cluster where all markers are detected simultaneously).

Here, we use the manually curated cell type labels to find genes markers for each population of cells in the PBMC. Specifically, we require markers to detected (strictly more than 0 counts; assay.type = "counts", threshold = 0) at least 20% more frequently in the target cluster than any other cluster (min.diff = 0.2, diff.method = "min"). Furthermore, we also require the combined set of markers to be codetected in at least 10% of the target cluster (min.prop = 0.1). Lastly, we request the method to return a maximum of 2 markers per signature (n = 2).

basesets <- learnSignatures(
    se = tenx_pbmc3k, assay.type = "counts",
    method = "PositiveProportionDifference", cluster.col = "seurat.celltype",
    threshold = 0, n = 2, min.diff = 0.2, diff.method = "min", min.prop = 0.1)
basesets
#> Sets with 16 relations between 16 elements and 8 sets
#>              element             set | ProportionPositive
#>          <character>     <character> |          <numeric>
#>  [1] ENSG00000142546     CD4 T cells |           0.648132
#>  [2] ENSG00000100100     CD4 T cells |           0.417897
#>  [3] ENSG00000143546 CD14+ Monocytes |           0.972860
#>  [4] ENSG00000170458 CD14+ Monocytes |           0.661795
#>  [5] ENSG00000156738         B cells |           0.859649
#>  ...             ...             ... .                ...
#> [12] ENSG00000115523        NK cells |            0.96129
#> [13] ENSG00000179639 Dendritic Cells |            0.84375
#> [14] ENSG00000108561 Dendritic Cells |            0.84375
#> [15] ENSG00000163736  Megakaryocytes |            1.00000
#> [16] ENSG00000163737  Megakaryocytes |            1.00000
#>      minDifferenceProportion
#>                    <numeric>
#>  [1]                0.241882
#>  [2]                0.223092
#>  [3]                0.469675
#>  [4]                0.411795
#>  [5]                0.776847
#>  ...                     ...
#> [12]                0.652849
#> [13]                0.829136
#> [14]                0.438885
#> [15]                0.942675
#> [16]                0.937500
#> -----------
#> elementInfo: IdVector with 1 metadata (ProportionPositive)
#>     setInfo: IdVector with 1 metadata (ProportionPositive)

In hancock, learning methods return Sets objects, defined in the unisets package. This container stores relations between elements (e.g., genes) and sets (e.g., signatures), along with optional metadata associated with each relation. In the next section, we explore the various pieces of information populated by method = "PositiveProportionDifference").

Visualizing learning outputs

Relation metadata

Notably, the metadata associated with each relation between a marker ("element") and the signature ("set") can be flattened in a data.frame format. Specifically, the "PositiveProportionDifference" describes two pieces of information:

  • "ProportionPositive", the proportion of cells with detectable expression of the marker in the associated cluster
  • "minDifferenceProportion", the minimal difference betwween the detection rate in the associated cluster compared with that of each other cluster
knitr::kable(head(as.data.frame(basesets)))
element set ProportionPositive minDifferenceProportion
ENSG00000142546 CD4 T cells 0.6481321 0.2418821
ENSG00000100100 CD4 T cells 0.4178975 0.2230923
ENSG00000143546 CD14+ Monocytes 0.9728601 0.4696754
ENSG00000170458 CD14+ Monocytes 0.6617954 0.4117954
ENSG00000156738 B cells 0.8596491 0.7768466
ENSG00000105369 B cells 0.9356725 0.7481725

Specifically, we can extract the relationships between markers and clusters and annotate them with gene metadata such as gene symbol, stored in the rowData slot of the tenx_pbmc3k object.

markerTable <- merge(
    x = as.data.frame(basesets), y = as.data.frame(rowData(tenx_pbmc3k)[, "Symbol", drop=FALSE]),
    by.x="element", by.y="row.names", sort=FALSE
)
knitr::kable(markerTable)
element set ProportionPositive minDifferenceProportion Symbol
ENSG00000142546 CD4 T cells 0.6481321 0.2418821 NOSIP
ENSG00000100100 CD4 T cells 0.4178975 0.2230923 PIK3IP1
ENSG00000143546 CD14+ Monocytes 0.9728601 0.4696754 S100A8
ENSG00000170458 CD14+ Monocytes 0.6617954 0.4117954 CD14
ENSG00000156738 B cells 0.8596491 0.7768466 MS4A1
ENSG00000105369 B cells 0.9356725 0.7481725 CD79A
ENSG00000113088 CD8 T cells 0.5876623 0.4779849 GZMK
ENSG00000153563 CD8 T cells 0.5032468 0.3989896 CD8A
ENSG00000166927 FCGR3A+ Monocytes 0.8025478 0.5415874 MS4A7
ENSG00000224397 FCGR3A+ Monocytes 0.8216561 0.5252051 SMIM25
ENSG00000100453 NK cells 0.9548387 0.6658777 GZMB
ENSG00000115523 NK cells 0.9612903 0.6528488 GNLY
ENSG00000179639 Dendritic Cells 0.8437500 0.8291362 FCER1A
ENSG00000108561 Dendritic Cells 0.8437500 0.4388847 C1QBP
ENSG00000163736 Megakaryocytes 1.0000000 0.9426752 PPBP
ENSG00000163737 Megakaryocytes 1.0000000 0.9375000 PF4

Marker metadata

In addition, metadata associated with each unique marker–irrespective of its specific relationships with individual signature–are stored in the metadata columns of the elementInfo slot. Specifically, the "PositiveProportionDifference" describes "ProportionPositive", the proportion of cells with detectable expression of the markers across the entire data set.

mcols(elementInfo(basesets))
#> DataFrame with 16 rows and 1 column
#>                 ProportionPositive
#>                          <numeric>
#> ENSG00000142546           0.429113
#> ENSG00000100100           0.251706
#> ENSG00000143546           0.276725
#> ENSG00000170458           0.144049
#> ENSG00000156738           0.157316
#> ...                            ...
#> ENSG00000115523          0.1800607
#> ENSG00000179639          0.0208491
#> ENSG00000108561          0.3730099
#> ENSG00000163736          0.0288097
#> ENSG00000163737          0.0155421

Using the gene metadata available in the rowData slot of the tenx_pbmc3k object, we can add the gene symbol associated with each marker to the marker metadata.

mcols(elementInfo(basesets)) <- cbind(
    mcols(elementInfo(basesets)),
    rowData(tenx_pbmc3k)[
        ids(elementInfo(basesets)),
        c("Symbol", "ENSEMBL_ID", "Symbol_TENx")]
)
mcols(elementInfo(basesets))
#> DataFrame with 16 rows and 4 columns
#>                 ProportionPositive      Symbol      ENSEMBL_ID Symbol_TENx
#>                          <numeric> <character>     <character> <character>
#> ENSG00000142546           0.429113       NOSIP ENSG00000142546       NOSIP
#> ENSG00000100100           0.251706     PIK3IP1 ENSG00000100100     PIK3IP1
#> ENSG00000143546           0.276725      S100A8 ENSG00000143546      S100A8
#> ENSG00000170458           0.144049        CD14 ENSG00000170458        CD14
#> ENSG00000156738           0.157316       MS4A1 ENSG00000156738       MS4A1
#> ...                            ...         ...             ...         ...
#> ENSG00000115523          0.1800607        GNLY ENSG00000115523        GNLY
#> ENSG00000179639          0.0208491      FCER1A ENSG00000179639      FCER1A
#> ENSG00000108561          0.3730099       C1QBP ENSG00000108561       C1QBP
#> ENSG00000163736          0.0288097        PPBP ENSG00000163736        PPBP
#> ENSG00000163737          0.0155421         PF4 ENSG00000163737         PF4

Set metadata

Similarly, metadata associated with each unique signature–irrespective of its specific relationships with individual markers–are stored in the metadata columns of the setInfo slot. Specifically, the "PositiveProportionDifference" describes "ProportionPositive", the proportion of cells with detectable expression of all markers associated with each signature across the entire data set.

mcols(setInfo(basesets))
#> DataFrame with 8 rows and 1 column
#>                   ProportionPositive
#>                            <numeric>
#> CD4 T cells                 0.126846
#> CD14+ Monocytes             0.217119
#> B cells                     0.172515
#> CD8 T cells                 0.162338
#> FCGR3A+ Monocytes           0.121019
#> NK cells                    0.161290
#> Dendritic Cells             0.125000
#> Megakaryocytes              0.142857

Applying signatures to predict labels

Markers learned previously may then be applied on any data set with compatible gene identifiers. Here, we apply the signatures learned above to the training data set itself, to annotate each cluster with its corresponding signature. In particular, we intentionally use the unsupervised cluster assignment rather instead of the manually curated cell type annotation, to simulate the scenario where users wish to automatically annotate unlabelled populations of cells.

tenx_pbmc3k.hancock <- predict(
    basesets, tenx_pbmc3k, assay.type = "counts",
    method = "ProportionPositive", cluster.col="seurat.ident")
tenx_pbmc3k.hancock
#> class: SingleCellExperiment 
#> dim: 32738 2638 
#> metadata(1): hancock
#> assays(1): counts
#> rownames(32738): ENSG00000243485 ENSG00000237613 ... ENSG00000215616
#>   ENSG00000215611
#> rowData names(3): ENSEMBL_ID Symbol_TENx Symbol
#> colnames(2638): Cell1 Cell2 ... Cell2699 Cell2700
#> colData names(14): Sample Barcode ... seurat.celltype hancock
#> reducedDimNames(0):
#> altExpNames(0):

In hancock, the predict function populates:

  • the "hancock" column of colData(tenx_pbmc3k.hancock)
  • the "hancock" item of metadata(tenx_pbmc3k.hancock)

In the next section, we explore the various pieces of information populated by method = "ProportionPositive".

Visualizing prediction outputs

Predicted cell label

The key output of every prediction method is the cell identity predicted for each cell in the object. All prediction methods store this information in colData(sce)[["hancock"]][["prediction"]], or sce$hancock$prediction, in short.

summary(as.data.frame(colData(tenx_pbmc3k.hancock)[["hancock"]]))
#>              prediction  
#>  CD4 T cells      :1151  
#>  CD14+ Monocytes  : 479  
#>  B cells          : 342  
#>  CD8 T cells      : 308  
#>  FCGR3A+ Monocytes: 157  
#>  NK cells         : 155  
#>  (Other)          :  46

The metadata slot is used to store some required information:

  • "GeneSets", the signatures used in the prediction process
  • "method", the unique identifier of the prediction method
  • "packageVersion", the version of the hancock package that performed the prediction

Optional method-specific information may be added by each prediction method. For method="ProportionPositive", those are:

  • "ProportionPositiveByCluster", the proportion of cells in each cluster that express all markers in each signature
  • "TopSignatureByCluster", the most frequently detected signature in each cluster
metadata(tenx_pbmc3k.hancock)[["hancock"]]
#> $GeneSets
#> Sets with 16 relations between 16 elements and 8 sets
#>              element             set | ProportionPositive
#>          <character>     <character> |          <numeric>
#>  [1] ENSG00000142546     CD4 T cells |           0.648132
#>  [2] ENSG00000100100     CD4 T cells |           0.417897
#>  [3] ENSG00000143546 CD14+ Monocytes |           0.972860
#>  [4] ENSG00000170458 CD14+ Monocytes |           0.661795
#>  [5] ENSG00000156738         B cells |           0.859649
#>  ...             ...             ... .                ...
#> [12] ENSG00000115523        NK cells |            0.96129
#> [13] ENSG00000179639 Dendritic Cells |            0.84375
#> [14] ENSG00000108561 Dendritic Cells |            0.84375
#> [15] ENSG00000163736  Megakaryocytes |            1.00000
#> [16] ENSG00000163737  Megakaryocytes |            1.00000
#>      minDifferenceProportion
#>                    <numeric>
#>  [1]                0.241882
#>  [2]                0.223092
#>  [3]                0.469675
#>  [4]                0.411795
#>  [5]                0.776847
#>  ...                     ...
#> [12]                0.652849
#> [13]                0.829136
#> [14]                0.438885
#> [15]                0.942675
#> [16]                0.937500
#> -----------
#> elementInfo: IdVector with 4 metadata (ProportionPositive, Symbol, ...)
#>     setInfo: IdVector with 1 metadata (ProportionPositive)
#> 
#> $method
#> [1] "ProportionPositive"
#> 
#> $packageVersion
#> [1] '0.99.0'
#> 
#> $ProportionPositiveByCluster
#>                    cluster
#> signature                     0           1           2           3          4
#>   CD4 T cells       0.284100782 0.025052192 0.014619883 0.077922078 0.05095541
#>   CD14+ Monocytes   0.003475239 0.651356994 0.002923977 0.000000000 0.07643312
#>   B cells           0.003475239 0.000000000 0.809941520 0.003246753 0.00000000
#>   CD8 T cells       0.005212858 0.000000000 0.000000000 0.292207792 0.00000000
#>   FCGR3A+ Monocytes 0.002606429 0.079331942 0.000000000 0.000000000 0.67515924
#>   NK cells          0.003475239 0.010438413 0.002923977 0.129870130 0.00000000
#>   Dendritic Cells   0.006081668 0.004175365 0.002923977 0.006493506 0.00000000
#>   Megakaryocytes    0.000000000 0.004175365 0.000000000 0.006493506 0.01910828
#>                    cluster
#> signature                     5       6          7
#>   CD4 T cells       0.032258065 0.03125 0.00000000
#>   CD14+ Monocytes   0.000000000 0.21875 0.07142857
#>   B cells           0.000000000 0.03125 0.00000000
#>   CD8 T cells       0.006451613 0.03125 0.00000000
#>   FCGR3A+ Monocytes 0.000000000 0.00000 0.07142857
#>   NK cells          0.916129032 0.00000 0.07142857
#>   Dendritic Cells   0.012903226 0.68750 0.00000000
#>   Megakaryocytes    0.000000000 0.00000 1.00000000
#> 
#> $TopSignatureByCluster
#>                 0                 1                 2                 3 
#>       CD4 T cells   CD14+ Monocytes           B cells       CD8 T cells 
#>                 4                 5                 6                 7 
#> FCGR3A+ Monocytes          NK cells   Dendritic Cells    Megakaryocytes 
#> 8 Levels: CD4 T cells CD14+ Monocytes B cells ... Megakaryocytes

In particular, "ProportionPositiveByCluster" may be visualized as a heat map using the plotProportionPositive method. This view is useful to examine the specificity of each signature for each cluster.

plotProportionPositive(tenx_pbmc3k.hancock, cluster_rows=FALSE, cluster_columns=FALSE)

Renaming signatures

Manually

Renaming a set of signatures is as simple as renaming the identifiers of the setInfo slot that stores the signatures. For instance, here we prefix each signature by a unique integer identifier.

ids(setInfo(basesets)) <- paste0(seq_along(setInfo(basesets)), ". ", ids(setInfo(basesets)))
ids(setInfo(basesets))
#> [1] "1. CD4 T cells"       "2. CD14+ Monocytes"   "3. B cells"          
#> [4] "4. CD8 T cells"       "5. FCGR3A+ Monocytes" "6. NK cells"         
#> [7] "7. Dendritic Cells"   "8. Megakaryocytes"

Interactively

In addition, the hancock package includes a lightweight shiny app that offers users the possibility to interactively rename signatures while inspecting their features in a SummarizedExperiment object (e.g., count of cells associated with each signature, layout in reduced dimension).

Specifically, the app requires a set of signatures and a SummarizedExperiment object that was previously annotated with those signatures using the predict function. When closed, the app returns the updated set of signatures.

Furthermore, this shiny app automatically detects the presence of optional dimensionality reduction results in SingleCellExperiment objects, allowing inspection and annotation of the gene signatures using that information.

library(scater)
tenx_pbmc3k <- logNormCounts(tenx_pbmc3k)
tenx_pbmc3k <- runPCA(tenx_pbmc3k)
tenx_pbmc3k <- runTSNE(tenx_pbmc3k)
tenx_pbmc3k.hancock <- predict(
    basesets, tenx_pbmc3k, assay.type = "counts", method = "ProportionPositive",
    cluster.col="seurat.celltype")
if (interactive()) {
    library(shiny)
    basesets <- runApp(shinyLabels(basesets, tenx_pbmc3k.hancock))
}
ids(setInfo(basesets))
#> [1] "1. CD4 T cells"       "2. CD14+ Monocytes"   "3. B cells"          
#> [4] "4. CD8 T cells"       "5. FCGR3A+ Monocytes" "6. NK cells"         
#> [7] "7. Dendritic Cells"   "8. Megakaryocytes"

As an example of plot available in the app, dimensionality reduction may facilitate the identification of cell populations more similar or related to each other.

reducedDimPrediction(tenx_pbmc3k.hancock, highlight = "6. NK cells", redDimType = "TSNE")

Types of signatures

Absolute markers

As described in the accompanying concepts vignette, absolute markers (also known as “pan markers”) may be defined as genes detected in each cluster, irrespective of their expression in the other clusters.

For instance, the "PositiveProportionDifference" learning method can be used to identify such markers, by setting min.diff=0 to annul any comparison between the detection frequency in the target cluster and all other clusters.

As the numbers of genes detected in each cluster may be rather large, it is generally a good idea to restrict markers to be detected in a very high fraction of the corresponding cluster, for instance min.prop = 0.9. In addition, the threshold argument may be used to define a minimal threshold of expression level to consider a marker as “detected” in each cell, and the assay.type argument declares the assay to use (e.g., “counts”, “logcouts”, “TPM”).

This ensures that for each cluster, the combined set of markers is simultaneously detected above 1 transcript per million (TPM) in at least 90% of cells in that cluster.

basesets <- learnSignatures(
    se = tenx_pbmc3k, assay.type = "counts",
    method = "PositiveProportionDifference", cluster.col = "seurat.celltype",
    min.diff = 0, min.prop = 0.9, threshold = 1)
knitr::kable(table(ids(sets(basesets))), col.names = c("Signature", "Genes"))
Signature Genes
B cells 14
CD14+ Monocytes 10
CD4 T cells 7
CD8 T cells 14
Dendritic Cells 110
FCGR3A+ Monocytes 29
Megakaryocytes 14
NK cells 13

Relative markers

As described in the accompanying concepts vignette, relative markers (also known as “key markers”) may be defined by differential analysis against other cells in the same sample.

For instance, the "PositiveProportionDifference" learning method can be used to identify such markers, by setting min.diff to a value greater than 0, in order to subset candidate markers to those detected at a rate at least 50% higher than the detection rate observed in any other cluster.

basesets <- learnSignatures(
    se = tenx_pbmc3k, assay.type = "counts",
    method = "PositiveProportionDifference", cluster.col = "seurat.celltype",
    min.diff = 0.5, diff.method = "min")
knitr::kable(table(ids(sets(basesets))), col.names = c("Signature", "Genes"))
Signature Genes
B cells 4
Dendritic Cells 2
FCGR3A+ Monocytes 3
Megakaryocytes 22
NK cells 4

Among the learning outputs stored in the Sets metadata information, the relation metadata column "minDifferenceProportion" reflects the min.diff=0.5 threshold applied when learning the signatures.

summary(mcols(relations(basesets))[["minDifferenceProportion"]])
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>  0.5087  0.5918  0.7482  0.7287  0.8536  0.9427

In addition, information about individual markers may be stored as element metadata accessible using the elementInfo and mcols methods as shown below. For instance, the proportion of cells positive for each marker across the entire data set.

mcols(elementInfo(basesets))
#> DataFrame with 35 rows and 1 column
#>                 ProportionPositive
#>                          <numeric>
#> ENSG00000156738          0.1573161
#> ENSG00000105369          0.1580743
#> ENSG00000247982          0.0815011
#> ENSG00000100721          0.1000758
#> ENSG00000166927          0.1178923
#> ...                            ...
#> ENSG00000171611          0.0075815
#> ENSG00000100351          0.1106899
#> ENSG00000166333          0.1129644
#> ENSG00000145335          0.0212282
#> ENSG00000115758          0.1008340

Similarly, information about individual sets may be stored as set metadata accessible using the setInfo and mcols methods as shown below. For instance, the proportion of cells simultaneously positive for all markers in the cluster where this signature was defined.

mcols(setInfo(basesets))
#> DataFrame with 8 rows and 1 column
#>                   ProportionPositive
#>                            <numeric>
#> CD4 T cells                 1.000000
#> CD14+ Monocytes             1.000000
#> B cells                     0.304094
#> CD8 T cells                 1.000000
#> FCGR3A+ Monocytes           0.426752
#> NK cells                    0.612903
#> Dendritic Cells             0.687500
#> Megakaryocytes              0.142857

For instance, future methods to identify absolute markers could include differential expression between the target cluster and all other clusters to identify candidate markers significantly differentially expressed between clusters.

Additional information

Bug reports can be posted as issues in the hancock GitHub repository. The GitHub repository is the primary source for development versions of the package, where new functionality is added over time. The authors appreciate well-considered suggestions for improvements or new features, or even better, pull requests.

If you use hancock for your analysis, please cite it as shown below:

citation("hancock")
#> 
#> To cite package 'hancock' in publications use:
#> 
#>   Kevin Rue-Albrecht, Robert Amezquita and Aaron Lun (2018). hancock:
#>   Learn and Apply Cell Type Signatures.
#>   https://github.com/kevinrue/hancock,
#>   http://kevinrue.github.io/hancock.
#> 
#> A BibTeX entry for LaTeX users is
#> 
#>   @Manual{,
#>     title = {hancock: Learn and Apply Cell Type Signatures},
#>     author = {Kevin Rue-Albrecht and Robert Amezquita and Aaron Lun},
#>     year = {2018},
#>     note = {https://github.com/kevinrue/hancock,
#> http://kevinrue.github.io/hancock},
#>   }

Session Info

sessionInfo()
#> R Under development (unstable) (2020-05-29 r78616)
#> Platform: x86_64-pc-linux-gnu (64-bit)
#> Running under: Ubuntu 16.04.6 LTS
#> 
#> Matrix products: default
#> BLAS:   /home/travis/R-bin/lib/R/lib/libRblas.so
#> LAPACK: /home/travis/R-bin/lib/R/lib/libRlapack.so
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#>  [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_TELEPHONE=C            
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
#> 
#> attached base packages:
#> [1] parallel  stats4    stats     graphics  grDevices utils     datasets 
#> [8] methods   base     
#> 
#> other attached packages:
#>  [1] scater_1.17.0               ggplot2_3.3.1              
#>  [3] TENxPBMCData_1.7.0          HDF5Array_1.17.0           
#>  [5] rhdf5_2.33.0                SingleCellExperiment_1.11.2
#>  [7] hancock_0.99.0              unisets_0.99.0             
#>  [9] SummarizedExperiment_1.19.4 DelayedArray_0.15.1        
#> [11] matrixStats_0.56.0          Biobase_2.49.0             
#> [13] GenomicRanges_1.41.1        GenomeInfoDb_1.25.0        
#> [15] IRanges_2.23.6              S4Vectors_0.27.9           
#> [17] BiocGenerics_0.35.2         BiocStyle_2.17.0           
#> 
#> loaded via a namespace (and not attached):
#>   [1] backports_1.1.7               circlize_0.4.9               
#>   [3] AnnotationHub_2.21.0          BiocFileCache_1.13.0         
#>   [5] plyr_1.8.6                    GSEABase_1.51.1              
#>   [7] shinydashboard_0.7.1          BiocParallel_1.23.0          
#>   [9] digest_0.6.25                 htmltools_0.4.0              
#>  [11] viridis_0.5.1                 magrittr_1.5                 
#>  [13] memoise_1.1.0                 cluster_2.1.0                
#>  [15] ComplexHeatmap_2.5.3          Biostrings_2.57.0            
#>  [17] annotate_1.67.0               pkgdown_1.5.1                
#>  [19] colorspace_1.4-1              blob_1.2.1                   
#>  [21] rappdirs_0.3.1                xfun_0.14                    
#>  [23] dplyr_1.0.0                   crayon_1.3.4                 
#>  [25] RCurl_1.98-1.2                jsonlite_1.6.1               
#>  [27] graph_1.67.1                  glue_1.4.1                   
#>  [29] gtable_0.3.0                  zlibbioc_1.35.0              
#>  [31] XVector_0.29.1                GetoptLong_0.1.8             
#>  [33] BiocSingular_1.5.0            Rhdf5lib_1.11.0              
#>  [35] shape_1.4.4                   scales_1.1.1                 
#>  [37] DBI_1.1.0                     Rcpp_1.0.4.6                 
#>  [39] viridisLite_0.3.0             xtable_1.8-4                 
#>  [41] clue_0.3-57                   bit_1.1-15.2                 
#>  [43] rsvd_1.0.3                    httr_1.4.1                   
#>  [45] RColorBrewer_1.1-2            ellipsis_0.3.1               
#>  [47] farver_2.0.3                  pkgconfig_2.0.3              
#>  [49] XML_3.99-0.3                  dbplyr_1.4.4                 
#>  [51] labeling_0.3                  tidyselect_1.1.0             
#>  [53] rlang_0.4.6                   reshape2_1.4.4               
#>  [55] later_1.0.0                   AnnotationDbi_1.51.0         
#>  [57] munsell_0.5.0                 BiocVersion_3.12.0           
#>  [59] tools_4.1.0                   generics_0.0.2               
#>  [61] RSQLite_2.2.0                 ExperimentHub_1.15.0         
#>  [63] rintrojs_0.2.2                evaluate_0.14                
#>  [65] stringr_1.4.0                 fastmap_1.0.1                
#>  [67] yaml_2.2.1                    knitr_1.28                   
#>  [69] bit64_0.9-7                   fs_1.4.1                     
#>  [71] purrr_0.3.4                   mime_0.9                     
#>  [73] compiler_4.1.0                beeswarm_0.2.3               
#>  [75] curl_4.3                      png_0.1-7                    
#>  [77] interactiveDisplayBase_1.27.2 tibble_3.0.1                 
#>  [79] stringi_1.4.6                 highr_0.8                    
#>  [81] desc_1.2.0                    lattice_0.20-41              
#>  [83] Matrix_1.2-18                 vctrs_0.3.0                  
#>  [85] pillar_1.4.4                  lifecycle_0.2.0              
#>  [87] BiocManager_1.30.10           GlobalOptions_0.1.1          
#>  [89] BiocNeighbors_1.7.0           cowplot_1.0.0                
#>  [91] bitops_1.0-6                  irlba_2.3.3                  
#>  [93] httpuv_1.5.3.1                rtracklayer_1.49.1           
#>  [95] R6_2.4.1                      bookdown_0.19                
#>  [97] promises_1.1.0                gridExtra_2.3                
#>  [99] vipor_0.4.5                   MASS_7.3-51.6                
#> [101] assertthat_0.2.1              rprojroot_1.3-2              
#> [103] rjson_0.2.20                  withr_2.2.0                  
#> [105] GenomicAlignments_1.25.0      Rsamtools_2.5.0              
#> [107] GenomeInfoDbData_1.2.3        grid_4.1.0                   
#> [109] beachmat_2.5.0                rmarkdown_2.2                
#> [111] DelayedMatrixStats_1.11.0     Rtsne_0.15                   
#> [113] shiny_1.4.0.2                 ggbeeswarm_0.6.0
# devtools::session_info()

References