liana: Intro

The continuous developments of single-cell RNA-Seq (scRNA-Seq) have sparked an immense interest in understanding intercellular crosstalk. Multiple tools and resources that aid the investigation of cell-cell communication (CCC) were published recently. However, these methods and resources are usually in a fixed combination of a tool and its corresponding resource, but in principle any resource could be combined with any method.

To this end, we built liana - a framework to decouple the tools from their corresponding resources.

Load required packages

CCC Resources

liana provides CCC resources obtained and formatted via OmnipathR which are then converted to the appropriate format to each method.

# Resource currently included in OmniPathR (and hence `liana`) include:
show_resources()
#>  [1] "Reshuffled"       "Default"          "CellChatDB"       "CellPhoneDB"     
#>  [5] "Ramilowski2015"   "Baccin2019"       "LRdb"             "Kirouac2010"     
#>  [9] "ICELLNET"         "iTALK"            "EMBRACE"          "HPMR"            
#> [13] "Guide2Pharma"     "connectomeDB2020" "talklr"           "CellTalkDB"      
#> [17] "OmniPath"

# A list of resources can be obtained using the `select_resource()` function:
# See `?select_resource()` documentation for further information.
# select_resource(c('OmniPath')) %>% glimpse() 

CCC Methods

Each of the resources can then be run with any of the following methods:

# Resource currently included in OmniPathR (and hence `liana`) include:
show_methods()
#>  [1] "logfc"           "natmi"           "connectome"      "sca"            
#>  [5] "squidpy"         "cellchat"        "call_sca"        "call_natmi"     
#>  [9] "call_italk"      "call_connectome"

Note that the different algorithms (or scoring measures) used in sca, natmi, italk, and connectome were re-implemented in LIANA. Yet, the original method pipelines can be called via the call_* functions. The original methods did not take complexes into account, while their re-implementations in liana do (see below).

liana wrapper function

To run liana, we will use a toy PBMCs scRNA-Seq data set, obtained from SeuratData liana takes Seurat objects as input, containing processed counts and clustered cells

liana_path <- system.file(package = "liana")
testdata <-
  readRDS(file.path(liana_path , "testdata", "input", "testdata.rds"))

testdata %>% glimpse()
#> Formal class 'Seurat' [package "Seurat"] with 13 slots
#>   ..@ assays      :List of 1
#>   .. ..$ RNA:Formal class 'Assay' [package "Seurat"] with 8 slots
#>   ..@ meta.data   :'data.frame': 90 obs. of  4 variables:
#>   .. ..$ orig.ident        : Factor w/ 1 level "pbmc3k": 1 1 1 1 1 1 1 1 1 1 ...
#>   .. ..$ nCount_RNA        : num [1:90] 4903 3914 4973 3281 2641 ...
#>   .. ..$ nFeature_RNA      : int [1:90] 1352 1112 1445 1015 928 937 899 1713 960 888 ...
#>   .. ..$ seurat_annotations: Factor w/ 3 levels "B","CD8 T","NK": 1 1 1 1 3 3 1 1 1 1 ...
#>   ..@ active.assay: chr "RNA"
#>   ..@ active.ident: Factor w/ 3 levels "B","CD8 T","NK": 1 1 1 1 3 3 1 1 1 1 ...
#>   .. ..- attr(*, "names")= chr [1:90] "AAACATTGAGCTAC" "AAACTTGAAAAACG" "AAAGGCCTGTCTAG" "AAAGTTTGGGGTGA" ...
#>   ..@ graphs      : list()
#>   ..@ neighbors   : list()
#>   ..@ reductions  : list()
#>   ..@ images      : list()
#>   ..@ project.name: chr "SeuratProject"
#>   ..@ misc        : list()
#>   ..@ version     :Classes 'package_version', 'numeric_version'  hidden list of 1
#>   .. ..$ : int [1:3] 3 2 3
#>   ..@ commands    :List of 1
#>   .. ..$ FindVariableFeatures.RNA:Formal class 'SeuratCommand' [package "Seurat"] with 5 slots
#>   ..@ tools       : list()

liana_wrap calls a number of methods and and each method is run with the provided resource(s).

We will now call all methods that are currently available in liana.

Here we use only the “OmniPath” CCC resource, but any of the aforementioned ones (available via show_resources()) can be added to the resource parameter

# Run liana
liana_test <- liana_wrap(testdata,
                         method = c("sca", "natmi", "logfc", "connectome",
                                    "cellchat", "squidpy"),
                         resource = c('OmniPath'),
                          # CellChat requires normalized data
                         cellchat.params = list(.normalize=TRUE))

LIANA currently provides a mixture of re-implemented methods and pipelines which externally call specific LR methods.

By default sca-, natmi, and logfc-, and connectome-like scores are obtained via their liana re-implementations, while Squidpy and CellChat pipelines are called externally.

For more information and validation with the original methods see LIANA++ and validate scores, respectively.

Obtain Consensus Ranks

liana also provides consensus ranks for the results obtained using different methods. By default, liana will provide mean, median, and aggregate* consensus ranks

# Liana returns a list of results, each element of which corresponds to a method
liana_test %>% glimpse
#> List of 6
#>  $ sca       : tibble [9,396 × 10] (S3: tbl_df/tbl/data.frame)
#>   ..$ source          : chr [1:9396] "B" "B" "B" "B" ...
#>   ..$ target          : chr [1:9396] "B" "B" "B" "B" ...
#>   ..$ ligand.complex  : chr [1:9396] "NRP2" "BAMBI" "BAMBI" "DLL1" ...
#>   ..$ ligand          : chr [1:9396] "NRP2" "BAMBI" "BAMBI" "DLL1" ...
#>   ..$ receptor.complex: chr [1:9396] "SEMA4F" "BMPR1A" "TGFBR1" "NOTCH1" ...
#>   ..$ receptor        : chr [1:9396] "SEMA4F" "BMPR1A" "TGFBR1" "NOTCH1" ...
#>   ..$ ligand.expr     : num [1:9396] 0 0 0 0 0 0 0.3 0.3 0.3 0.3 ...
#>   ..$ receptor.expr   : num [1:9396] 0 0 0.0333 0.0333 0.0667 ...
#>   ..$ global_mean     : num [1:9396] 0.318 0.318 0.318 0.318 0.318 ...
#>   ..$ LRscore         : num [1:9396] 0 0 0 0 0 ...
#>  $ natmi     : tibble [9,396 × 11] (S3: tbl_df/tbl/data.frame)
#>   ..$ source          : chr [1:9396] "B" "B" "B" "B" ...
#>   ..$ target          : chr [1:9396] "B" "B" "B" "B" ...
#>   ..$ ligand.complex  : chr [1:9396] "NRP2" "BAMBI" "BAMBI" "DLL1" ...
#>   ..$ ligand          : chr [1:9396] "NRP2" "BAMBI" "BAMBI" "DLL1" ...
#>   ..$ receptor.complex: chr [1:9396] "SEMA4F" "BMPR1A" "TGFBR1" "NOTCH1" ...
#>   ..$ receptor        : chr [1:9396] "SEMA4F" "BMPR1A" "TGFBR1" "NOTCH1" ...
#>   ..$ ligand.expr     : num [1:9396] 0 0 0 0 0 0 0.3 0.3 0.3 0.3 ...
#>   ..$ receptor.expr   : num [1:9396] 0 0 0.0333 0.0333 0.0667 ...
#>   ..$ ligand.sum      : num [1:9396] 0 0 0 0.0667 0.0667 ...
#>   ..$ receptor.sum    : num [1:9396] 0 0 0.233 0.167 0.1 ...
#>   ..$ edge_specificity: num [1:9396] 0 0 0 0 0 ...
#>  $ logfc     : tibble [9,396 × 9] (S3: tbl_df/tbl/data.frame)
#>   ..$ source          : chr [1:9396] "B" "B" "B" "B" ...
#>   ..$ target          : chr [1:9396] "B" "B" "B" "B" ...
#>   ..$ ligand.complex  : chr [1:9396] "NRP2" "BAMBI" "BAMBI" "DLL1" ...
#>   ..$ ligand          : chr [1:9396] "NRP2" "BAMBI" "BAMBI" "DLL1" ...
#>   ..$ receptor.complex: chr [1:9396] "SEMA4F" "BMPR1A" "TGFBR1" "NOTCH1" ...
#>   ..$ receptor        : chr [1:9396] "SEMA4F" "BMPR1A" "TGFBR1" "NOTCH1" ...
#>   ..$ ligand.log2FC   : num [1:9396] 0 0 0 -0.0416 -0.0416 ...
#>   ..$ receptor.log2FC : num [1:9396] 0 0 -0.08617 0.00185 0.10918 ...
#>   ..$ logfc_comb      : num [1:9396] 0 0 0 -0.0416 -0.0416 ...
#>  $ connectome: tibble [9,396 × 9] (S3: tbl_df/tbl/data.frame)
#>   ..$ source          : chr [1:9396] "B" "B" "B" "B" ...
#>   ..$ target          : chr [1:9396] "B" "B" "B" "B" ...
#>   ..$ ligand.complex  : chr [1:9396] "NRP2" "BAMBI" "BAMBI" "DLL1" ...
#>   ..$ ligand          : chr [1:9396] "NRP2" "BAMBI" "BAMBI" "DLL1" ...
#>   ..$ receptor.complex: chr [1:9396] "SEMA4F" "BMPR1A" "TGFBR1" "NOTCH1" ...
#>   ..$ receptor        : chr [1:9396] "SEMA4F" "BMPR1A" "TGFBR1" "NOTCH1" ...
#>   ..$ ligand.scaled   : num [1:9396] 0 0 0 -0.15 -0.15 ...
#>   ..$ receptor.scaled : num [1:9396] 0 0 -0.1188 -0.0965 0.1847 ...
#>   ..$ weight_sc       : num [1:9396] 0 0 -0.0594 -0.1232 0.0174 ...
#>  $ cellchat  : tibble [71 × 6] (S3: tbl_df/tbl/data.frame)
#>   ..$ source  : Factor w/ 3 levels "B","CD8 T","NK": 3 1 2 3 1 2 3 1 2 3 ...
#>   ..$ target  : Factor w/ 3 levels "B","CD8 T","NK": 3 2 2 2 2 2 2 3 3 3 ...
#>   ..$ ligand  : chr [1:71] "TYROBP" "HLA-B" "HLA-B" "HLA-B" ...
#>   ..$ receptor: chr [1:71] "KLRD1" "CD8A" "CD8A" "CD8A" ...
#>   ..$ prob    : num [1:71] 0.144 0.154 0.169 0.183 0.266 ...
#>   ..$ pval    : num [1:71] 0 0 0 0 0 0 0 0 0 0 ...
#>  $ squidpy   : tibble [9,396 × 8] (S3: tbl_df/tbl/data.frame)
#>   ..$ ligand        : chr [1:9396] "NRP2" "NRP2" "NRP2" "NRP2" ...
#>   ..$ receptor      : chr [1:9396] "SEMA4F" "SEMA4F" "SEMA4F" "SEMA4F" ...
#>   ..$ source        : chr [1:9396] "B" "B" "B" "CD8 T" ...
#>   ..$ target        : chr [1:9396] "B" "CD8 T" "NK" "B" ...
#>   ..$ means         : num [1:9396] 0 0 0 0 0 0 0 0 0 0 ...
#>   ..$ pvalue        : num [1:9396] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
#>   ..$ uniprot_source: chr [1:9396] "O60462" "O60462" "O60462" "O60462" ...
#>   ..$ unprot_target : chr [1:9396] "O95754" "O95754" "O95754" "O95754" ...

# We can aggregate these results into a dataframe with consensus ranks
liana_test %>%
  liana_aggregate()
#> # A tibble: 9,396 x 19
#>    source ligand  target receptor aggregate_rank mean_rank median_rank
#>    <chr>  <chr>   <chr>  <chr>             <dbl>     <dbl>       <dbl>
#>  1 B      HLA-DMA B      CD74      0.00000000339     1595.        39.5
#>  2 B      HLA-DMB B      CD74      0.00000000487     1603.        60.5
#>  3 NK     SPON2   NK     ITGB2     0.0000000333      1616.        75.5
#>  4 NK     TYROBP  NK     KLRD1     0.0000000333      1611.        60.5
#>  5 NK     B2M     NK     CD247     0.0000000559       160.         9.5
#>  6 NK     B2M     NK     KLRC1     0.0000000716       161.        38.5
#>  7 NK     B2M     NK     KLRD1     0.0000000903       140.        12.5
#>  8 NK     HLA-E   NK     KLRD1     0.000000145        268.       284. 
#>  9 NK     KLRD1   NK     HLA-E     0.000000148        206.        97  
#> 10 NK     KLRD1   CD8 T  HLA-E     0.000000185        214.        98.5
#> # … with 9,386 more rows, and 12 more variables: sca.LRscore <dbl>,
#> #   sca.rank <dbl>, natmi.edge_specificity <dbl>, natmi.rank <dbl>,
#> #   logfc.logfc_comb <dbl>, logfc.rank <dbl>, connectome.weight_sc <dbl>,
#> #   connectome.rank <dbl>, cellchat.pval <dbl>, cellchat.rank <dbl>,
#> #   squidpy.pvalue <dbl>, squidpy.rank <dbl>

*The aggregate consensus rank is obtained using the RobustRankAggreg package and its RRA method.

RRA scores can be interpreted as p-values and interactions which are ranked consistently higher than random are assigned low scores/p-values.

SingleCellSignalR, NATMI, and Connectome Scores /w Complexes

The re-implementation of the aforementioned methods in LIANA enables us to make use of multimeric complex information as provided by the e.g. CellPhoneDB, CellChatDB, and ICELLNET resources

# Run liana re-implementations with the CellPhoneDB resource
complex_test <- liana_wrap(testdata,
                           method = c('natmi', 'sca', 'logfc', 'connectome'),
                           resource = c('CellPhoneDB'))

complex_test %>% liana_aggregate()
#> # A tibble: 2,891 x 15
#>    source ligand target receptor aggregate_rank mean_rank median_rank
#>    <chr>  <chr>  <chr>  <chr>             <dbl>     <dbl>       <dbl>
#>  1 CD8 T  CCL5   B      CCR1        0.000000678      33          29.5
#>  2 NK     CCL4   CD8 T  CCR5        0.00000328       52.5        58.5
#>  3 CD8 T  SIRPG  NK     CD47        0.00000328       75.8        72  
#>  4 B      CD52   B      SIGLEC10    0.00000411       41.2        33.5
#>  5 B      APP    B      CD74        0.00000468       94.8        16  
#>  6 CD8 T  CCL5   CD8 T  CCR5        0.00000488       43.8        34  
#>  7 B      HBEGF  CD8 T  CD44        0.00000553       63          59  
#>  8 B      ALOX5  NK     ALOX5AP     0.00000600       71.8        79.5
#>  9 NK     HLA-C  NK     KIR2DL3     0.00000649       55.2        53.5
#> 10 CD8 T  CD48   NK     CD244       0.00000816       73          66.5
#> # … with 2,881 more rows, and 8 more variables: natmi.edge_specificity <dbl>,
#> #   natmi.rank <dbl>, sca.LRscore <dbl>, sca.rank <dbl>,
#> #   logfc.logfc_comb <dbl>, logfc.rank <dbl>, connectome.weight_sc <dbl>,
#> #   connectome.rank <dbl>

Call liana with overwritten default settings

By default liana is run with the default for each method which can be obtained via liana_default()

Alternatively, one can also overwrite the default settings by simply passing them to the liana wrapper function

# Overwrite CellChat default parameters by providing a list of parameters
liana_test <- liana_wrap(testdata,
                         method = c('cellchat', 'sca'),
                         resource = 'OmniPath',
                         cellchat.params = 
                           list(
                             nboot = 10,
                             exclude_anns = NULL,
                             thresh = 1,
                             assay = "RNA",
                             .normalize = TRUE,
                             .do_parallel = FALSE,
                             .raw_use = TRUE
                             ),
                         liana_call.params=list(complex_policy = "mean")
                         )
#> The cell groups used for CellChat analysis are  B CD8 T NK 
#> Issue identified!! Please check the official Gene Symbol of the following genes:  
#>  CYR61 WISP1 CTGF FAM19A4 CD97

# This returns a list of results for each method
liana_test %>% glimpse
#> List of 2
#>  $ cellchat: tibble [113 × 6] (S3: tbl_df/tbl/data.frame)
#>   ..$ source  : Factor w/ 3 levels "B","CD8 T","NK": 1 3 1 2 3 1 2 3 1 2 ...
#>   ..$ target  : Factor w/ 3 levels "B","CD8 T","NK": 3 3 2 2 2 1 1 1 2 2 ...
#>   ..$ ligand  : chr [1:113] "TYROBP" "TYROBP" "HLA-B" "HLA-B" ...
#>   ..$ receptor: chr [1:113] "KLRD1" "KLRD1" "CD8A" "CD8A" ...
#>   ..$ prob    : num [1:113] 0.0105 0.1442 0.1544 0.1694 0.1827 ...
#>   ..$ pval    : num [1:113] 0.2 0 0 0 0 1 1 1 0 0 ...
#>  $ sca     : tibble [9,396 × 10] (S3: tbl_df/tbl/data.frame)
#>   ..$ source          : chr [1:9396] "B" "B" "B" "B" ...
#>   ..$ target          : chr [1:9396] "B" "B" "B" "B" ...
#>   ..$ ligand.complex  : chr [1:9396] "NRP2" "BAMBI" "BAMBI" "DLL1" ...
#>   ..$ ligand          : chr [1:9396] "NRP2" "BAMBI" "BAMBI" "DLL1" ...
#>   ..$ receptor.complex: chr [1:9396] "SEMA4F" "BMPR1A" "TGFBR1" "NOTCH1" ...
#>   ..$ receptor        : chr [1:9396] "SEMA4F" "BMPR1A" "TGFBR1" "NOTCH1" ...
#>   ..$ ligand.expr     : num [1:9396] 0 0 0 0 0 0 0.3 0.3 0.3 0.3 ...
#>   ..$ receptor.expr   : num [1:9396] 0 0 0.0333 0.0333 0.0667 ...
#>   ..$ global_mean     : num [1:9396] 0.318 0.318 0.318 0.318 0.318 ...
#>   ..$ LRscore         : num [1:9396] 0 0 0 0 0 ...

Note that with liana_call.params we change the way that we account for complexes. By default this is set to min0/min (as done for expression in CellPhoneDB/Squidpy), which assigns these statistics for each complex to those closest to 0. Here we change it to mean, but any alternative function can be passed and other perfectly viable approaches could also include e.g. the Trimean of CellChat.

Information about the parameters passed to each method can be obtained via liana_call and via

call_* functions - e.g. ?call_cellchat or ?call_squidpy. A list with the default parameters themselves can be obtained via liana_defaults()

Call a method pipeline alone

To call a any single method, you can use any of the call_* methods:

# RUN cellchat alone with OmniPath
cc_res <- call_cellchat(
  seurat_object = testdata,
  op_resource = select_resource('OmniPath')[[1]],
  .normalize = TRUE,
  nboot = 10)
#> Create a CellChat object from a data matrix
#> Set cell identities for the new CellChat object
#> The cell groups used for CellChat analysis are  B CD8 T NK 
#> Issue identified!! Please check the official Gene Symbol of the following genes:  
#>  CYR61 WISP1 CTGF FAM19A4 CD97

# Show CellChat Results
cc_res
#> # A tibble: 70 x 6
#>    source target ligand receptor  prob  pval
#>    <fct>  <fct>  <chr>  <chr>    <dbl> <dbl>
#>  1 NK     NK     TYROBP KLRD1    0.144     0
#>  2 B      CD8 T  HLA-B  CD8A     0.154     0
#>  3 CD8 T  CD8 T  HLA-B  CD8A     0.169     0
#>  4 NK     CD8 T  HLA-B  CD8A     0.183     0
#>  5 B      CD8 T  HLA-B  CD3D     0.266     0
#>  6 CD8 T  CD8 T  HLA-B  CD3D     0.288     0
#>  7 NK     CD8 T  HLA-B  CD3D     0.307     0
#>  8 B      NK     HLA-B  KLRD1    0.171     0
#>  9 CD8 T  NK     HLA-B  KLRD1    0.187     0
#> 10 NK     NK     HLA-B  KLRD1    0.201     0
#> # … with 60 more rows

It is however important to note that the methods available via call_* will not installed in LIANA by default, and further installation steps might need to be taken (See liana landing page for CellChat and Squidpy, and LIANA++ for the rest).

Citation

#> 
#> To cite liana in publications use:
#> 
#>   Dimitrov, D., Türei, D., Boys, C., Nagai, J.S., Flores, R.O.R., Kim,
#>   H., Szalai, B., Costa, I.G., Dugourd, A., Valdeolivas, A. and
#>   Saez-Rodriguez, J., 2021.  Comparison of Resources and Methods to
#>   infer Cell-Cell Communication from Single-cell RNA Data. bioRxiv.
#> 
#> A BibTeX entry for LaTeX users is
#> 
#>   @Article{,
#>     author = {Daniel Dimitrov and Charlotte Boys and Denes Turei and James Nagai S. and Ricardo Ramirez Flores O. and Hyojin Kim and Bence Szalai and Ivan Costa G. and Aurélien Dugourd and Alberto Valdeolivas and Julio Saez-Rodriguez},
#>     title = {Comparison of Resources and Methods to infer Cell-Cell Communication from Single-cell RNA Data},
#>     journal = {BioRxiv},
#>     year = {2021},
#>     doi = {10.1101/2021.05.21.445160},
#>     encoding = {UTF-8},
#>   }

Session information

#> ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
#>  setting  value                       
#>  version  R version 4.0.3 (2020-10-10)
#>  os       Ubuntu 20.04.2 LTS          
#>  system   x86_64, linux-gnu           
#>  ui       X11                         
#>  language (EN)                        
#>  collate  en_US.UTF-8                 
#>  ctype    en_US.UTF-8                 
#>  tz       Europe/Berlin               
#>  date     2021-08-06                  
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
#>  package              * version  date       lib source                            
#>  abind                  1.4-5    2016-07-21 [2] CRAN (R 4.0.2)                    
#>  assertthat             0.2.1    2019-03-21 [2] CRAN (R 4.0.2)                    
#>  backports              1.2.1    2020-12-09 [2] CRAN (R 4.0.2)                    
#>  beachmat               2.6.4    2020-12-20 [2] Bioconductor                      
#>  beeswarm               0.2.3    2016-04-25 [2] CRAN (R 4.0.2)                    
#>  Biobase              * 2.50.0   2020-10-27 [2] Bioconductor                      
#>  BiocGenerics         * 0.36.0   2020-10-27 [2] Bioconductor                      
#>  BiocManager            1.30.10  2019-11-16 [2] CRAN (R 4.0.2)                    
#>  BiocNeighbors          1.8.2    2020-12-07 [2] Bioconductor                      
#>  BiocParallel           1.24.1   2020-11-06 [2] Bioconductor                      
#>  BiocSingular           1.6.0    2020-10-27 [2] Bioconductor                      
#>  BiocStyle            * 2.18.1   2020-11-24 [2] Bioconductor                      
#>  bitops                 1.0-6    2013-08-17 [2] CRAN (R 4.0.2)                    
#>  bluster                1.0.0    2020-10-27 [2] Bioconductor                      
#>  bookdown               0.21     2020-10-13 [2] CRAN (R 4.0.2)                    
#>  bslib                  0.2.4    2021-01-25 [2] CRAN (R 4.0.3)                    
#>  cachem                 1.0.4    2021-02-13 [2] CRAN (R 4.0.3)                    
#>  Cairo                  1.5-12.2 2020-07-07 [2] CRAN (R 4.0.3)                    
#>  CellChat               1.1.0    2021-05-02 [2] Github (sqjin/CellChat@b3ccf96)   
#>  cellranger             1.1.0    2016-07-27 [2] CRAN (R 4.0.2)                    
#>  checkmate              2.0.0    2020-02-06 [2] CRAN (R 4.0.3)                    
#>  circlize               0.4.12   2021-01-08 [2] CRAN (R 4.0.3)                    
#>  cli                    2.5.0    2021-04-26 [2] CRAN (R 4.0.3)                    
#>  clue                   0.3-58   2020-12-03 [2] CRAN (R 4.0.3)                    
#>  cluster                2.1.0    2019-06-19 [5] CRAN (R 4.0.0)                    
#>  coda                   0.19-4   2020-09-30 [2] CRAN (R 4.0.3)                    
#>  codetools              0.2-16   2018-12-24 [5] CRAN (R 4.0.0)                    
#>  colorspace             2.0-0    2020-11-11 [2] CRAN (R 4.0.2)                    
#>  ComplexHeatmap         2.6.2    2020-11-12 [2] Bioconductor                      
#>  cowplot                1.1.1    2020-12-30 [2] CRAN (R 4.0.3)                    
#>  crayon                 1.4.1    2021-02-08 [2] CRAN (R 4.0.3)                    
#>  curl                   4.3      2019-12-02 [2] CRAN (R 4.0.2)                    
#>  data.table             1.14.0   2021-02-21 [2] CRAN (R 4.0.3)                    
#>  DBI                    1.1.1    2021-01-15 [2] CRAN (R 4.0.3)                    
#>  DelayedArray           0.16.1   2021-01-22 [2] Bioconductor                      
#>  DelayedMatrixStats     1.12.3   2021-02-03 [2] Bioconductor                      
#>  deldir                 0.2-10   2021-02-16 [2] CRAN (R 4.0.3)                    
#>  desc                   1.2.0    2018-05-01 [2] CRAN (R 4.0.2)                    
#>  digest                 0.6.27   2020-10-24 [2] CRAN (R 4.0.2)                    
#>  doParallel             1.0.16   2020-10-16 [2] CRAN (R 4.0.2)                    
#>  dplyr                  1.0.7    2021-06-18 [2] CRAN (R 4.0.3)                    
#>  dqrng                  0.2.1    2019-05-17 [2] CRAN (R 4.0.2)                    
#>  edgeR                  3.32.1   2021-01-14 [2] Bioconductor                      
#>  ellipsis               0.3.2    2021-04-29 [2] CRAN (R 4.0.3)                    
#>  evaluate               0.14     2019-05-28 [2] CRAN (R 4.0.2)                    
#>  fansi                  0.4.2    2021-01-15 [2] CRAN (R 4.0.3)                    
#>  fastmap                1.1.0    2021-01-25 [2] CRAN (R 4.0.3)                    
#>  fitdistrplus           1.1-3    2020-12-05 [2] CRAN (R 4.0.2)                    
#>  FNN                    1.1.3    2019-02-15 [2] CRAN (R 4.0.2)                    
#>  foreach                1.5.1    2020-10-15 [2] CRAN (R 4.0.2)                    
#>  fs                     1.5.0    2020-07-31 [2] CRAN (R 4.0.2)                    
#>  future                 1.21.0   2020-12-10 [2] CRAN (R 4.0.3)                    
#>  future.apply           1.7.0    2021-01-04 [2] CRAN (R 4.0.3)                    
#>  generics               0.1.0    2020-10-31 [2] CRAN (R 4.0.2)                    
#>  GenomeInfoDb           1.26.2   2020-12-08 [2] Bioconductor                      
#>  GenomeInfoDbData       1.2.4    2020-12-14 [2] Bioconductor                      
#>  GenomicRanges          1.42.0   2020-10-27 [2] Bioconductor                      
#>  GetoptLong             1.0.5    2020-12-15 [2] CRAN (R 4.0.3)                    
#>  gg.gap                 1.3      2019-09-30 [2] CRAN (R 4.0.3)                    
#>  ggalluvial             0.12.3   2020-12-05 [2] CRAN (R 4.0.3)                    
#>  ggbeeswarm             0.6.0    2017-08-07 [2] CRAN (R 4.0.2)                    
#>  ggplot2                3.3.3    2020-12-30 [2] CRAN (R 4.0.3)                    
#>  ggrepel                0.9.1    2021-01-15 [2] CRAN (R 4.0.3)                    
#>  ggridges               0.5.3    2021-01-08 [2] CRAN (R 4.0.3)                    
#>  GlobalOptions          0.1.2    2020-06-10 [2] CRAN (R 4.0.3)                    
#>  globals                0.14.0   2020-11-22 [2] CRAN (R 4.0.2)                    
#>  glue                   1.4.2    2020-08-27 [2] CRAN (R 4.0.2)                    
#>  goftest                1.2-2    2019-12-02 [2] CRAN (R 4.0.2)                    
#>  gridBase               0.4-7    2014-02-24 [2] CRAN (R 4.0.3)                    
#>  gridExtra              2.3      2017-09-09 [2] CRAN (R 4.0.2)                    
#>  gtable                 0.3.0    2019-03-25 [2] CRAN (R 4.0.2)                    
#>  hms                    1.0.0    2021-01-13 [2] CRAN (R 4.0.3)                    
#>  htmltools              0.5.1.1  2021-01-22 [2] CRAN (R 4.0.3)                    
#>  htmlwidgets            1.5.3    2020-12-10 [2] CRAN (R 4.0.2)                    
#>  httpuv                 1.5.5    2021-01-13 [2] CRAN (R 4.0.3)                    
#>  httr                   1.4.2    2020-07-20 [2] CRAN (R 4.0.2)                    
#>  ica                    1.0-2    2018-05-24 [2] CRAN (R 4.0.2)                    
#>  igraph                 1.2.6    2020-10-06 [2] CRAN (R 4.0.2)                    
#>  IRanges                2.24.1   2020-12-12 [2] Bioconductor                      
#>  irlba                  2.3.3    2019-02-05 [2] CRAN (R 4.0.2)                    
#>  iterators              1.0.13   2020-10-15 [2] CRAN (R 4.0.2)                    
#>  jquerylib              0.1.3    2020-12-17 [2] CRAN (R 4.0.3)                    
#>  jsonlite               1.7.2    2020-12-09 [2] CRAN (R 4.0.2)                    
#>  KernSmooth             2.23-17  2020-04-26 [5] CRAN (R 4.0.0)                    
#>  knitr                  1.31     2021-01-27 [2] CRAN (R 4.0.3)                    
#>  later                  1.1.0.1  2020-06-05 [2] CRAN (R 4.0.2)                    
#>  lattice                0.20-41  2020-04-02 [5] CRAN (R 4.0.0)                    
#>  lazyeval               0.2.2    2019-03-15 [2] CRAN (R 4.0.2)                    
#>  leiden                 0.3.7    2021-01-26 [2] CRAN (R 4.0.3)                    
#>  liana                * 0.0.1    2021-08-06 [1] local                             
#>  lifecycle              1.0.0    2021-02-15 [2] CRAN (R 4.0.3)                    
#>  limma                  3.46.0   2020-10-27 [2] Bioconductor                      
#>  listenv                0.8.0    2019-12-05 [2] CRAN (R 4.0.2)                    
#>  lmtest                 0.9-38   2020-09-09 [2] CRAN (R 4.0.2)                    
#>  locfit                 1.5-9.4  2020-03-25 [2] CRAN (R 4.0.2)                    
#>  logger                 0.2.0    2021-03-04 [2] CRAN (R 4.0.3)                    
#>  magrittr               2.0.1    2020-11-17 [2] CRAN (R 4.0.2)                    
#>  MASS                   7.3-53   2020-09-09 [5] CRAN (R 4.0.2)                    
#>  Matrix                 1.3-4    2021-06-01 [2] CRAN (R 4.0.3)                    
#>  MatrixGenerics         1.2.1    2021-01-30 [2] Bioconductor                      
#>  matrixStats            0.58.0   2021-01-29 [2] CRAN (R 4.0.3)                    
#>  memoise                2.0.0    2021-01-26 [2] CRAN (R 4.0.3)                    
#>  mgcv                   1.8-33   2020-08-27 [5] CRAN (R 4.0.2)                    
#>  mime                   0.10     2021-02-13 [2] CRAN (R 4.0.3)                    
#>  miniUI                 0.1.1.1  2018-05-18 [2] CRAN (R 4.0.2)                    
#>  munsell                0.5.0    2018-06-12 [2] CRAN (R 4.0.2)                    
#>  network                1.16.1   2020-10-07 [2] CRAN (R 4.0.2)                    
#>  nlme                   3.1-149  2020-08-23 [5] CRAN (R 4.0.2)                    
#>  NMF                    0.23.0   2020-08-01 [2] CRAN (R 4.0.3)                    
#>  OmnipathR              3.1.2    2021-08-05 [2] Github (saezlab/OmnipathR@ec33baa)
#>  parallelly             1.24.0   2021-03-14 [2] CRAN (R 4.0.3)                    
#>  patchwork              1.1.1    2020-12-17 [2] CRAN (R 4.0.3)                    
#>  pbapply                1.4-3    2020-08-18 [2] CRAN (R 4.0.2)                    
#>  pillar                 1.6.1    2021-05-16 [2] CRAN (R 4.0.3)                    
#>  pkgconfig              2.0.3    2019-09-22 [2] CRAN (R 4.0.2)                    
#>  pkgdown                1.6.1    2020-09-12 [2] CRAN (R 4.0.3)                    
#>  pkgmaker               0.32.2   2020-10-20 [2] CRAN (R 4.0.3)                    
#>  plotly                 4.9.3    2021-01-10 [2] CRAN (R 4.0.3)                    
#>  plyr                   1.8.6    2020-03-03 [2] CRAN (R 4.0.2)                    
#>  png                    0.1-7    2013-12-03 [2] CRAN (R 4.0.2)                    
#>  polyclip               1.10-0   2019-03-14 [2] CRAN (R 4.0.2)                    
#>  prettyunits            1.1.1    2020-01-24 [2] CRAN (R 4.0.2)                    
#>  progress               1.2.2    2019-05-16 [2] CRAN (R 4.0.2)                    
#>  promises               1.2.0.1  2021-02-11 [2] CRAN (R 4.0.3)                    
#>  purrr                * 0.3.4    2020-04-17 [2] CRAN (R 4.0.2)                    
#>  R6                     2.5.0    2020-10-28 [2] CRAN (R 4.0.2)                    
#>  ragg                   1.1.0    2021-02-15 [2] CRAN (R 4.0.3)                    
#>  RANN                   2.6.1    2019-01-08 [2] CRAN (R 4.0.2)                    
#>  rappdirs               0.3.3    2021-01-31 [2] CRAN (R 4.0.3)                    
#>  RColorBrewer           1.1-2    2014-12-07 [2] CRAN (R 4.0.2)                    
#>  Rcpp                   1.0.6    2021-01-15 [2] CRAN (R 4.0.3)                    
#>  RcppAnnoy              0.0.18   2020-12-15 [2] CRAN (R 4.0.3)                    
#>  RCurl                  1.98-1.3 2021-03-16 [2] CRAN (R 4.0.3)                    
#>  readr                  2.0.0    2021-07-20 [2] CRAN (R 4.0.3)                    
#>  readxl                 1.3.1    2019-03-13 [2] CRAN (R 4.0.2)                    
#>  registry               0.5-1    2019-03-05 [2] CRAN (R 4.0.3)                    
#>  reshape2               1.4.4    2020-04-09 [2] CRAN (R 4.0.2)                    
#>  reticulate             1.18     2020-10-25 [2] CRAN (R 4.0.2)                    
#>  rjson                  0.2.20   2018-06-08 [2] CRAN (R 4.0.3)                    
#>  rlang                  0.4.11   2021-04-30 [2] CRAN (R 4.0.3)                    
#>  rle                    0.9.2    2020-09-25 [2] CRAN (R 4.0.3)                    
#>  rmarkdown              2.7      2021-02-19 [2] CRAN (R 4.0.3)                    
#>  rngtools               1.5      2020-01-23 [2] CRAN (R 4.0.2)                    
#>  RobustRankAggreg       1.1      2013-06-03 [2] CRAN (R 4.0.3)                    
#>  ROCR                   1.0-11   2020-05-02 [2] CRAN (R 4.0.2)                    
#>  rpart                  4.1-15   2019-04-12 [5] CRAN (R 4.0.0)                    
#>  rprojroot              2.0.2    2020-11-15 [2] CRAN (R 4.0.2)                    
#>  RSpectra               0.16-0   2019-12-01 [2] CRAN (R 4.0.2)                    
#>  rstudioapi             0.13     2020-11-12 [2] CRAN (R 4.0.2)                    
#>  rsvd                   1.0.3    2020-02-17 [2] CRAN (R 4.0.2)                    
#>  Rtsne                  0.15     2018-11-10 [2] CRAN (R 4.0.2)                    
#>  S4Vectors              0.28.1   2020-12-09 [2] Bioconductor                      
#>  sass                   0.3.1    2021-01-24 [2] CRAN (R 4.0.3)                    
#>  scales                 1.1.1    2020-05-11 [2] CRAN (R 4.0.2)                    
#>  scater                 1.18.5   2021-02-16 [2] Bioconductor                      
#>  scattermore            0.7      2020-11-24 [2] CRAN (R 4.0.3)                    
#>  scran                  1.18.5   2021-02-04 [2] Bioconductor                      
#>  sctransform            0.3.2    2020-12-16 [2] CRAN (R 4.0.3)                    
#>  scuttle                1.0.4    2020-12-17 [2] Bioconductor                      
#>  sessioninfo            1.1.1    2018-11-05 [2] CRAN (R 4.0.2)                    
#>  Seurat                 4.0.3    2021-06-10 [2] CRAN (R 4.0.3)                    
#>  SeuratObject           4.0.2    2021-06-09 [2] CRAN (R 4.0.3)                    
#>  shape                  1.4.5    2020-09-13 [2] CRAN (R 4.0.3)                    
#>  shiny                  1.6.0    2021-01-25 [2] CRAN (R 4.0.3)                    
#>  SingleCellExperiment   1.12.0   2020-10-27 [2] Bioconductor                      
#>  sna                    2.6      2020-10-06 [2] CRAN (R 4.0.3)                    
#>  sparseMatrixStats      1.2.1    2021-02-02 [2] Bioconductor                      
#>  spatstat.core          2.0-0    2021-03-23 [2] CRAN (R 4.0.3)                    
#>  spatstat.data          2.1-0    2021-03-21 [2] CRAN (R 4.0.3)                    
#>  spatstat.geom          2.0-1    2021-03-22 [2] CRAN (R 4.0.3)                    
#>  spatstat.sparse        2.0-0    2021-03-16 [2] CRAN (R 4.0.3)                    
#>  spatstat.utils         2.1-0    2021-03-15 [2] CRAN (R 4.0.3)                    
#>  statmod                1.4.35   2020-10-19 [2] CRAN (R 4.0.2)                    
#>  statnet.common         4.4.1    2020-10-03 [2] CRAN (R 4.0.3)                    
#>  stringi                1.5.3    2020-09-09 [2] CRAN (R 4.0.2)                    
#>  stringr                1.4.0    2019-02-10 [2] CRAN (R 4.0.2)                    
#>  SummarizedExperiment   1.20.0   2020-10-27 [2] Bioconductor                      
#>  survival               3.2-7    2020-09-28 [2] CRAN (R 4.0.2)                    
#>  svglite                2.0.0    2021-02-20 [2] CRAN (R 4.0.3)                    
#>  systemfonts            1.0.1    2021-02-09 [2] CRAN (R 4.0.3)                    
#>  tensor                 1.5      2012-05-05 [2] CRAN (R 4.0.2)                    
#>  textshaping            0.3.0    2021-02-10 [2] CRAN (R 4.0.3)                    
#>  tibble               * 3.1.2    2021-05-16 [2] CRAN (R 4.0.3)                    
#>  tidyr                  1.1.3    2021-03-03 [2] CRAN (R 4.0.3)                    
#>  tidyselect             1.1.0    2020-05-11 [2] CRAN (R 4.0.2)                    
#>  tzdb                   0.1.2    2021-07-20 [2] CRAN (R 4.0.3)                    
#>  utf8                   1.1.4    2018-05-24 [2] CRAN (R 4.0.2)                    
#>  uwot                   0.1.10   2020-12-15 [2] CRAN (R 4.0.3)                    
#>  vctrs                  0.3.8    2021-04-29 [2] CRAN (R 4.0.3)                    
#>  vipor                  0.4.5    2017-03-22 [2] CRAN (R 4.0.2)                    
#>  viridis                0.5.1    2018-03-29 [2] CRAN (R 4.0.2)                    
#>  viridisLite            0.3.0    2018-02-01 [2] CRAN (R 4.0.2)                    
#>  withr                  2.4.1    2021-01-26 [2] CRAN (R 4.0.3)                    
#>  xfun                   0.21     2021-02-10 [2] CRAN (R 4.0.3)                    
#>  xml2                   1.3.2    2020-04-23 [2] CRAN (R 4.0.2)                    
#>  xtable                 1.8-4    2019-04-21 [2] CRAN (R 4.0.2)                    
#>  XVector                0.30.0   2020-10-27 [2] Bioconductor                      
#>  yaml                   2.2.1    2020-02-01 [2] CRAN (R 4.0.2)                    
#>  zlibbioc               1.36.0   2020-10-27 [2] Bioconductor                      
#>  zoo                    1.8-8    2020-05-02 [2] CRAN (R 4.0.2)                    
#> 
#> [1] /tmp/RtmpGG0Aze/temp_libpath4ab6714a62ffb
#> [2] /home/dbdimitrov/R/x86_64-pc-linux-gnu-library/4.0
#> [3] /usr/local/lib/R/site-library
#> [4] /usr/lib/R/site-library
#> [5] /usr/lib/R/library