Scanpy in R
1 Introduction
1.1 What is Scanpy?
The scanpy package is a scalable Python toolkit for analysing single-cell gene expression data. It includes functionality commonly used during an analysis of scRNA-seq data including quality control, clustering of cells and testing for marker genes. For more information please have a look at the Scanpy documentation or read the associated publication.
1.2 Why would I want to use it from R?
There are various reasons you may want to interact with scanpy from R. You may already be using scanpy for your project but want to use an R package for a section of your analysis or your project but be R based and you want to use some of Scanpy’s functionality.
1.3 What is covered in this tutorial?
This tutorial will cover how to set up a environment that lets you interact with scanpy from R. It will demonstrate some of the functions in scanpy but it won’t cover everything the package can do or how best to use scanpy for your analysis. For more details about what scanpy can do please refer to the tutorials and other information in the Scanpy documentation.
1.4 Formatting
This tutorial tries to use some formatting conventions to avoid confusion. Perhaps the most important is different coloured backgrounds to indicate R and Python code chunks.
An R code chunk looks like this:
And a Python code chunk looks like this:
The output of code chunks will have a grey background regardless of the programming language:
## [1] "Some R output"
## Some Python output
We also try to use these conventions in the text:
- {package} - An R package
package::function()
- A function in an R package- package - A Python package
package.function()
- A function in a Python package- Emphasised - Some other important concept
code
- Other parts of code including objects, variables etc. This is also used for files or directories.
2 Setting up
To use scanpy from R you will (unsurprisingly) need both an R and Python environment set up. If you are mostly an R user the easiest approach is to use the {renv} package to set up and manage these environments. This is what we will do for this tutorial. If you are primarily a Python user you may find it easier to create your own conda or virtualenv environment. The main thing is to have both R and Python available (with the required packages installed), however it is highly recommended you use some kind of environment system to improve the reproducibility of your project.
What is an environment?
An environment refers to all the software packages and versions that you currently have access to. Usually this is whatever is available on the main path of your computer which is referred to as the global or system environment. However there are several advantages to maintaining more control over the environment you are using.
Imagine you are using a software tool which depends on pkgA v1. What if you want to install another tool that depends on pkgA v2? You could either update pkgA which means the first tool would stop working or keep the current version and not be able to use the second tool. This is the problem that environment managers try to solve by allowing you to create isolated environments with specific package versions installed. This means we could have an environment with pkgA v1 installed for the first tool and switch to another environment with pkgA v2 installed when we want to use the second tool. For Python the two most commonly used environment managers are virtualenv and conda.
Environments can also help improve reproducibility by recording the specific versions of packages that are used for a project. This means that if someone else was to use your project they would install the same version and (should) get the same results. As the R language is more focused on interactive data analysis solving this problem is the goal of the R environment management package {renv}.
2.1 Using {renv}
The {renv} package helps you reproducible environments for an R project. These environments are designed to be isolated, portable and reproducible. This is similar to conda environments but they are confined to a specific project directory. Please refer to the {renv} documentation for more details.
2.1.1 Creating the R environment
To use {renv} we first need to make sure it is installed:
We can then ask {renv} to create an environment for us:
This command creates a new renv/
folder where your installed packages (and some other things) will be stored and a renv.lock
file which will be used to record the package versions. It will also create (or modify) the .Rprofile
file to make sure the environment is activated. Once we have this environment activated we can install/remove packages but they will be kept separate from the global package environment. If you already have files with R code in this directory {renv} will attempt to find which packages you are using and install them into your new library. By default renv::init()
will create the environment in the current working directory but you can also tell it to create it somewhere else by setting the project
argument.
2.1.2 Creating the Python environment
As we are going to be using Python we need to make sure we have the {reticulate} package installed in our new environment:
This package provides a set of tools for interoperability between Python and R (the Python equivalent is the rpy2 package). This includes calling Python functions from R, translating between Python and R objects and managing Python environments from R. For more details see the {reticulate} documentation.
Once {reticulate} is installed we can tell {renv} that we also want to use a Python environment:
Unless you specify a Python version with the python
argument or the RETICULATE_PYTHON
environment variable is set your default Python installation will be used. By default the type of environment created depends on your operating system (virtualenv on Linux/macOS or conda on Windows) but if you have a preference this can be controlled using the type
argument.
If you choose not to use {renv} a Python environment can also be created using the reticulate::use_python()
and reticulate::use_virtualenv()
/reticulate::use_condaenv()
functions.
2.2 Installing packages
2.2.1 R packages
Use the following command to install the R packages used during this tutorial:
pkgs <- c(
"renv",
"reticulate",
"png",
"ggplot2",
"BiocManager",
"Seurat"
)
bioc_pkgs <- c(
"SingleCellExperiment",
"scater",
"multtest"
)
# If you are using an {renv} environment
renv::install(pkgs)
# Otherwise do it the normal way
install.packages(pkgs)
# Install Bioconductor packages
BiocManager::install(bioc_pkgs, update = FALSE)
2.2.2 Python packages
The following Python packages are required for this tutorial:
To install them from R we can use reticulate::py_install()
:
If you are not using {renv}/{reticulate} to manage your Python environment please install them in the way you would normally.
3 Alternative approaches
There are two approaches you can use to interact with Python packages from R, both of which we will describe here.
The first approach is to perform our analysis in an R Markdown document. R Markdown is a text-based document format that lets you combine text and code. When the document is rendered the code is evaluated and the results is included in the output document, which can be several different formats including HTML, PDF and DOCX. Although it has been primarily designed to be used with R code R Markdown supports “engines” for several programming languages including Python. R Markdown documents that include Python code maintain a single Python session for the all the code chunks in a document. This lets us create a single document that contains native R and Python code and lets us transfer object between them as required.
The second approach is to access scanpy functions from R using the {reticulate} interface. While this means we can’t copy Python code from examples directly it doesn’t lock us into using R Markdown and may be easier for those who are comfortable with R code but unfamiliar with Python. It is also possible to use this approach inside an R Markdown document rather than using native Python code.
If you are already using R Markdown documents for your analysis it likely makes sense for you to use that approach, otherwise the choice is up to you. Which approach you choose to use may depend on a range of factors including which programming language you are more comfortable with and how much of your analysis you intend to perform using either language.
4 The R Markdown approach
First let’s work through the R Markdown approach. We won’t cover the all the basics of R Markdown documents so if you haven’t used them before you may want to work through an introductory tutorial first.
We will start by loading some R libraries.
suppressPackageStartupMessages({
library("reticulate")
library("ggplot2")
library("SingleCellExperiment")
library("scater")
library("Seurat")
})
## Warning: package 'S4Vectors' was built under R version 3.6.3
## Warning: package 'GenomeInfoDb' was built under R version 3.6.3
## Warning: package 'DelayedArray' was built under R version 3.6.3
We will also import scanpy in a Python chunk. A Python chunk begins with ```{python}
instead of ```{r}
. If you are using RStudio you can easily create on by clicking Insert > Python
in the R Markdown editor pane.
## /Users/luke.zappia/Documents/Projects/scanpy-in-R/renv/python/condaenvs/renv-python/lib/python3.6/site-packages/anndata/_core/anndata.py:21: FutureWarning: pandas.core.index is deprecated and will be removed in a future version. The public classes are available in the top-level namespace.
## from pandas.core.index import RangeIndex
4.1 Load data
As this tutorial focuses on the interaction between R and scanpy rather than the features of the package itself we will work with the processed PBMC3K dataset. This is a dataset of around 3000 peripheral blood mononuclear cells that was produced by 10x Genomics and has been processed as described in the scanpy PBMC3K tutorial.
NOTE: Running this command will download the dataset to a
data/
directory if it doesn’t already exist.
The data is returned as an AnnData
object. This is similar to a SingleCellExperiment
or Seurat
object used by R packages and stores matrices of expression values as well as annotation for cells and features and various other data structures created during analysis such as embeddings and nearest neighbour graphs. A key difference is that AnnData
matrices are transposed compared to those used by R packages, the rows represent cells and the columns represent features. Please refer to the anndata documentation for more details about this data structure.
Let’s have a look at what this one includes.
## AnnData object with n_obs × n_vars = 2638 × 1838
## obs: 'n_genes', 'percent_mito', 'n_counts', 'louvain'
## var: 'n_cells'
## uns: 'draw_graph', 'louvain', 'louvain_colors', 'neighbors', 'pca', 'rank_genes_groups'
## obsm: 'X_pca', 'X_tsne', 'X_umap', 'X_draw_graph_fr'
## varm: 'PCs'
4.2 Using scanpy functions
With the R Markdown approach using scanpy functions is easy. We simply create a new Python chunk and use standard Python commands. For example, let’s plot a UMAP of the Louvain clustering already stored in the object:
We could also re-cluster the data at a higher resolution and re-plot the UMAP. We store the new clustering in an observation variable called “louvain_2”.
4.3 Converting from Python to R
Python objects can be accessed from R using the special py
variable (as long as we have loaded the {reticulate} package). This variable is accessed as an R list
where each item in the list is an object in the Python session. For example let’s create a list in Python:
## ['My', 'list', 'of', 'things']
We can access that exact same list in R:
## [1] "My" "list" "of" "things"
We can even modify the list in R…
…and the changes are changes can be seen in Python.
## ['My', 'list', 'of', 'words']
For several common data structures the objects are automatically converted to their equivalent type in R.
## [1] "character"
This is also true for some more complex data structures. For example, variables associated with observations (cells) are stored as a pandas DataFrame
in our AnnData
object but are converted to a data.frame
in R.
## [1] "data.frame"
We can use this object directly in our R session. For example let’s plot the number of genes expressed per cell against the number of counts using {ggplot2}.
4.3.1 Creating a SingleCellExperiment
object from AnnData
Many of the R packages for scRNA-seq analysis are part of the Bioconductor project and use the SingleCellExperiment
object. To make use of these packages you may need to create one of these objects. Many of the parts of SingleCellExperiment
and AnnData
objects are equivalent and can be converted directly.
sce <- SingleCellExperiment(
assays = list(logcounts = t(py$adata$X)),
colData = py$adata$obs,
rowData = py$adata$var,
reducedDims = list(umap = py$adata$obsm["X_umap"])
)
sce
## class: SingleCellExperiment
## dim: 1838 2638
## metadata(0):
## assays(1): logcounts
## rownames(1838): TNFRSF4 CPSF3L ... S100B PRMT2
## rowData names(1): n_cells
## colnames(2638): AAACATACAACCAC-1 AAACATTGAGCTAC-1 ... TTTGCATGAGAGGC-1
## TTTGCATGCCTCAC-1
## colData names(5): n_genes percent_mito n_counts louvain louvain_2
## reducedDimNames(1): umap
## spikeNames(0):
## altExpNames(0):
Note that we haven’t copied everything to our new SingleCellExperiment
but only what is directly mappable and most likely to be useful. If you need some of the other information stored in the AnnData
object it should be possible to transfer that as well but you would need to decide where it best fits in the SingleCellExperiment
. We have also made some decisions about how to name things. For example we have stored the main X
expression matrix in the logcounts
assay as this represents a similar transformation of the expression data and functions in some packages expect this assay to exist.
To show that we can use this object let’s plot our UMAP again in R using the {scater} package.
Because the embedding has already been calculated in scanpy we use the scater::plotReducedDim()
function here but we could also ask {scater} to computer new embeddings for us.
4.3.2 Creating a Seurat
object from AnnData
The other object that is often used by R scRNA-seq analysis packages is the Seurat
object. We can create one of these in a similar way. Please see the {Seurat} documentation for more details about this object.
# Get the expression matrix
exprs <- t(py$adata$X)
colnames(exprs) <- py$adata$obs_names$to_list()
rownames(exprs) <- py$adata$var_names$to_list()
# Create the Seurat object
seurat <- CreateSeuratObject(exprs)
# Set the expression assay
seurat <- SetAssayData(seurat, "data", exprs)
# Add observation metadata
seurat <- AddMetaData(seurat, py$adata$obs)
# Add fetaure metadata
seurat[["RNA"]][["n_cells"]] <- py$adata$var["n_cells"]
# Add embedding
embedding <- py$adata$obsm["X_umap"]
rownames(embedding) <- py$adata$obs_names$to_list()
colnames(embedding) <- c("umap_1", "umap_2")
seurat[["umap"]] <- CreateDimReducObject(embedding, key = "umap_")
## Warning: No assay specified, setting assay as RNA by default.
## An object of class Seurat
## 1838 features across 2638 samples within 1 assay
## Active assay: RNA (1838 features)
## 1 dimensional reduction calculated: umap
The process for creating a Seurat
object is more complex that creating a SingleCellExperiment
and requires creating several other objects. The Seurat::CreateSeuratObject()
function expects a single matrix that contains raw count data. We don’t have that here so we use the normalised expression matrix instead. If we did have counts it would be better to use those. Seurat
objects can have multiple “assays” (the default is “RNA”) which can each have three data representations (“counts”, “data” and “scale.data”). We have placed the expression matrix in the “data” slot here but which is most appropriate depends on the data you are copying. Metadata for observations can be added using the Seurat::AddMetaData()
function but feature metadata must be added manually to the correct assay. We also add a DimReduc
object holding the UMAP embedding.
NOTE: The
Seurat::ReadH5AD()
function can be used to read the.h5ad
format commonly used to saveAnnData
objects to disk. This is another way to convert between the formats and will produce a more complete conversion at the cost of writing to disk.
The functions in {Seurat} (and related packages) can now be used with this object. Let’s recreate our UMAP plot:
4.4 Converting from R to Python
The reverse conversion can be done in a similar way. Just like there is a special py
variable in the R session there is a special r
variable in the Python section. Here is a quick example:
In Python the list looks like this.
## ['Some', 'more', 'things']
Notice that we use the .
operator in Python rather than the $
operator we used in R.
4.4.1 Creating AnnData
from SingleCellExperiment
Let’s pretend we have completed some analysis in our R session and we want to transfer the results back to our AnnData
object in the Python section.
Because some of the parts of the SingleCellExperiment
use non-standard classes (such as the Bioconductor DataFrame
class) that can’t be automatically converted by {reticulate} it is easiest to first extract the parts we want in R.
exprs <- assay(sce, "logcounts")
col_data <- as.data.frame(colData(sce))
row_data <- as.data.frame(rowData(sce))
embedding <- reducedDim(sce, "umap")
We can then had any variables we want to our AnnData
object in Python:
We could also create a new AnnData
object by transferring everything we extracted from the SingleCellExperiment
:
adata_sce = sc.AnnData(X = r.exprs.T, obs = r.col_data, var = r.row_data)
adata_sce.obsm['umap'] = r.embedding
This new AnnData
can also be used with scanpy
4.4.2 Creating AnnData
from Seurat
The process for creating an AnnData
object from a Seurat
object is very similar. First we extract the parts we want:
exprs <- GetAssayData(seurat)
meta <- seurat[[]]
feature_meta <- GetAssay(seurat)[[]]
embedding <- Embeddings(seurat, "umap")
Then we can construct a new AnnData
in a Python chunk.
adata_seurat = sc.AnnData(X = r.exprs.T, obs = r.meta, var = r.feature_meta)
adata_seurat.obsm['umap'] = r.embedding
This object should also be compatible with scanpy functions.
5 The {reticulate} approach
The {reticulate} approach involves calling scanpy functions from an R session. This means that we keep everything inside a single R session and only need to write R code but the downside is we cannot directly copy examples that have been written in Python.
We first need to load the R packages we need.
suppressPackageStartupMessages({
library("reticulate")
library("ggplot2")
library("SingleCellExperiment")
library("scater")
library("Seurat")
})
This time to load a Python package we don’t use a Python chunk but we use the reticulate::import()
function.
5.1 Load data
To load the dataset we will use the scanpy.pbmc3k_processed()
function. To use this from R the syntax is mostly the same but we replace the .
characters between modules with the $
operator in R.
If we print this object we should see the same output we saw in the corresponding Python chunk in the R Markdown approach.
## AnnData object with n_obs × n_vars = 2638 × 1838
## obs: 'n_genes', 'percent_mito', 'n_counts', 'louvain'
## var: 'n_cells'
## uns: 'draw_graph', 'louvain', 'louvain_colors', 'neighbors', 'pca', 'rank_genes_groups'
## obsm: 'X_pca', 'X_tsne', 'X_umap', 'X_draw_graph_fr'
## varm: 'PCs'
5.2 Using scanpy functions
Other scanpy functions can be called from R in the same way. Here is an example adding another clustering resolution.
## [1] "n_genes" "percent_mito" "n_counts" "louvain" "louvain_2"
NOTE: We don’t show a plotting example here as the plot will appear in a new window. It is still possible to use these function though.
5.3 Converting from Python to R
Accessing parts of our AnnData
object is simpler than it was with the R Markdown approach. We don’t have to worry about a special variable we can just extract information from the AnnData
using standard R operators. This works particularly well for those data structures that are automatically converted by {reticulate}.
## n_genes percent_mito n_counts louvain louvain_2
## AAACATACAACCAC-1 781 0.030177759 2419 CD4 T cells 6
## AAACATTGAGCTAC-1 1352 0.037935957 4903 B cells 1
## AAACATTGATCAGC-1 1131 0.008897362 3147 CD4 T cells 10
## AAACCGTGCTTCCG-1 960 0.017430846 2639 CD14+ Monocytes 5
## AAACCGTGTATGCG-1 522 0.012244898 980 NK cells 8
## AAACGCACTGGTAC-1 782 0.016643550 2163 CD8 T cells 9
## n_cells
## TNFRSF4 155
## CPSF3L 202
## ATAD3C 9
## C1orf86 501
## RER1 608
## TNFRSF25 170
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.1714695 -0.2808120 -0.04667679 -0.4751688 -0.5440238
## [2,] -0.2145822 -0.3726529 -0.05480444 -0.6833915 0.6339506
## [3,] -0.3768875 -0.2950843 -0.05752750 -0.5209721 1.3326473
## [4,] -0.2852409 -0.2817346 -0.05222673 -0.4849288 1.5726788
## [5,] -0.2564834 -0.2203940 -0.04680008 -0.3458593 -0.3334090
We can also directly pass these objects to R functions:
Some objects cannot be converted automatically. In this case you need to ask {reticulate} to run some Python code to convert the object to a format R can understand. We can them get the result from the magic py
variable.
## $params
## $params$layout
## [1] "fr"
##
## $params$random_state
## [1] 0
5.3.1 Creating a SingleCellExperiment
object from AnnData
Creating a SingleCellExperiment
is very similar to what we did in the R Markdown approach but with slightly simpler code.
sce <- SingleCellExperiment(
assays = list(logcounts = t(adata$X)),
colData = adata$obs,
rowData = adata$var,
reducedDims = list(umap = adata$obsm["X_umap"])
)
sce
## class: SingleCellExperiment
## dim: 1838 2638
## metadata(0):
## assays(1): logcounts
## rownames(1838): TNFRSF4 CPSF3L ... S100B PRMT2
## rowData names(1): n_cells
## colnames(2638): AAACATACAACCAC-1 AAACATTGAGCTAC-1 ... TTTGCATGAGAGGC-1
## TTTGCATGCCTCAC-1
## colData names(5): n_genes percent_mito n_counts louvain louvain_2
## reducedDimNames(1): umap
## spikeNames(0):
## altExpNames(0):
We can then use this object as normal:
5.3.2 Creating a Seurat
object from AnnData
The same is true when creating a Seurat
object.
exprs <- t(adata$X)
colnames(exprs) <- adata$obs_names$to_list()
rownames(exprs) <- adata$var_names$to_list()
# Create the Seurat object
seurat <- CreateSeuratObject(exprs)
# Set the expression assay
seurat <- SetAssayData(seurat, "data", exprs)
# Add observation metadata
seurat <- AddMetaData(seurat, adata$obs)
# Add fetaure metadata
seurat[["RNA"]][["n_cells"]] <- adata$var["n_cells"]
# Add embedding
embedding <- adata$obsm["X_umap"]
rownames(embedding) <- adata$obs_names$to_list()
colnames(embedding) <- c("umap_1", "umap_2")
seurat[["umap"]] <- CreateDimReducObject(embedding, key = "umap_")
## Warning: No assay specified, setting assay as RNA by default.
## An object of class Seurat
## 1838 features across 2638 samples within 1 assay
## Active assay: RNA (1838 features)
## 1 dimensional reduction calculated: umap
This should then function as a normal Seurat
object:
5.4 Converting from R to Python
Converting from R to Python is a bit different than when using the R Markdown approach as we can do everything in the R session in many cases.
## n_genes
## AAACATACAACCAC-1 781
## AAACATTGAGCTAC-1 1352
## AAACATTGATCAGC-1 1131
## AAACCGTGCTTCCG-1 960
## AAACCGTGTATGCG-1 522
## AAACGCACTGGTAC-1 782
When this doesn’t work we can use the magic r
variable with the reticulate::py_run_string()
function (as shown before) or the reticulate::py_eval()
function. Which one to use depends on what you are trying to do.
## index
## AAACATACAACCAC-1 781
## AAACATTGAGCTAC-1 1352
## AAACATTGATCAGC-1 1131
## AAACCGTGCTTCCG-1 960
## AAACCGTGTATGCG-1 522
## Name: n_genes, dtype: int64
5.4.1 Creating AnnData
from SingleCellExperiment
Because we are working only in R we don’t need to first extract and convert the part of the SingleCellExperiment
we want before creating a new AnnData
. Instead we can do everything at once.
adata_sce <- sc$AnnData(
X = t(logcounts(sce)),
obs = as.data.frame(colData(sce)),
var = as.data.frame(rowData(sce))
)
adata_sce$obsm$update(umap = reducedDim(sce, "umap"))
adata_sce
## AnnData object with n_obs × n_vars = 2638 × 1838
## obs: 'n_genes', 'percent_mito', 'n_counts', 'louvain', 'louvain_2'
## var: 'n_cells'
## obsm: 'umap'
5.4.2 Creating AnnData
from Seurat
The same is true when creating a new AnnData
from a Seurat
object.
adata_seurat <- sc$AnnData(
X = t(GetAssayData(seurat)),
obs = seurat[[]],
var = GetAssay(seurat)[[]]
)
adata_seurat$obsm$update(umap = Embeddings(seurat, "umap"))
adata_seurat
## AnnData object with n_obs × n_vars = 2638 × 1838
## obs: 'orig.ident', 'nCount_RNA', 'nFeature_RNA', 'n_genes', 'percent_mito', 'n_counts', 'louvain', 'louvain_2'
## var: 'n_cells'
## obsm: 'umap'
6 Environments
6.1 Session information
Details of the R session when building this tutorial.
Click here
## ─ Session info ───────────────────────────────────────────────────────────────
## setting value
## version R version 3.6.2 (2019-12-12)
## os macOS Catalina 10.15.3
## system x86_64, darwin15.6.0
## ui X11
## language (EN)
## collate en_US.UTF-8
## ctype en_US.UTF-8
## tz Europe/Berlin
## date 2020-04-27
##
## ─ Packages ───────────────────────────────────────────────────────────────────
## ! package * version date lib source
## P ape 5.3 2019-03-17 [?] CRAN (R 3.6.0)
## P assertthat 0.2.1 2019-03-21 [?] CRAN (R 3.6.0)
## beeswarm 0.2.3 2016-04-25 [1] CRAN (R 3.6.0)
## P bibtex 0.4.2.2 2020-01-02 [?] CRAN (R 3.6.0)
## Biobase * 2.46.0 2019-10-29 [1] Bioconductor
## BiocGenerics * 0.32.0 2019-10-29 [1] Bioconductor
## BiocNeighbors 1.4.2 2020-02-29 [1] Bioconductor
## BiocParallel * 1.20.1 2019-12-21 [1] Bioconductor
## BiocSingular 1.2.2 2020-02-14 [1] Bioconductor
## bitops 1.0-6 2013-08-17 [1] CRAN (R 3.6.0)
## P bookdown 0.18 2020-03-05 [?] CRAN (R 3.6.0)
## P caTools 1.18.0 2020-01-17 [?] CRAN (R 3.6.0)
## P cli 2.0.2 2020-02-28 [?] CRAN (R 3.6.0)
## P cluster 2.1.0 2019-06-19 [?] CRAN (R 3.6.2)
## P codetools 0.2-16 2018-12-24 [?] CRAN (R 3.6.2)
## P colorspace 1.4-1 2019-03-18 [?] CRAN (R 3.6.0)
## P cowplot 1.0.0 2019-07-11 [?] CRAN (R 3.6.0)
## P crayon 1.3.4 2017-09-16 [?] CRAN (R 3.6.0)
## P data.table 1.12.8 2019-12-09 [?] CRAN (R 3.6.0)
## DelayedArray * 0.12.3 2020-04-09 [1] Bioconductor
## DelayedMatrixStats 1.8.0 2019-10-29 [1] Bioconductor
## digest 0.6.25 2020-02-23 [1] CRAN (R 3.6.0)
## P dplyr 0.8.5 2020-03-07 [?] CRAN (R 3.6.0)
## P ellipsis 0.3.0 2019-09-20 [?] CRAN (R 3.6.0)
## evaluate 0.14 2019-05-28 [1] CRAN (R 3.6.0)
## P fansi 0.4.1 2020-01-08 [?] CRAN (R 3.6.0)
## P farver 2.0.3 2020-01-16 [?] CRAN (R 3.6.0)
## P fitdistrplus 1.0-14 2019-01-23 [?] CRAN (R 3.6.0)
## P future 1.16.0 2020-01-16 [?] CRAN (R 3.6.0)
## P future.apply 1.4.0 2020-01-07 [?] CRAN (R 3.6.0)
## P gbRd 0.4-11 2012-10-01 [?] CRAN (R 3.6.0)
## P gdata 2.18.0 2017-06-06 [?] CRAN (R 3.6.0)
## GenomeInfoDb * 1.22.1 2020-03-27 [1] Bioconductor
## GenomeInfoDbData 1.2.2 2020-04-16 [1] Bioconductor
## GenomicRanges * 1.38.0 2019-10-29 [1] Bioconductor
## ggbeeswarm 0.6.0 2017-08-07 [1] CRAN (R 3.6.0)
## P ggplot2 * 3.3.0 2020-03-05 [?] CRAN (R 3.6.0)
## P ggrepel 0.8.2 2020-03-08 [?] CRAN (R 3.6.0)
## P ggridges 0.5.2 2020-01-12 [?] CRAN (R 3.6.0)
## P globals 0.12.5 2019-12-07 [?] CRAN (R 3.6.0)
## P glue 1.4.0 2020-04-03 [?] CRAN (R 3.6.2)
## P gplots 3.0.3 2020-02-25 [?] CRAN (R 3.6.0)
## gridExtra 2.3 2017-09-09 [1] CRAN (R 3.6.0)
## P gtable 0.3.0 2019-03-25 [?] CRAN (R 3.6.0)
## P gtools 3.8.2 2020-03-31 [?] CRAN (R 3.6.2)
## htmltools 0.4.0 2019-10-04 [1] CRAN (R 3.6.0)
## P htmlwidgets 1.5.1 2019-10-08 [?] CRAN (R 3.6.0)
## P httr 1.4.1 2019-08-05 [?] CRAN (R 3.6.0)
## P ica 1.0-2 2018-05-24 [?] CRAN (R 3.6.0)
## P igraph 1.2.5 2020-03-19 [?] CRAN (R 3.6.0)
## IRanges * 2.20.2 2020-01-13 [1] Bioconductor
## irlba 2.3.3 2019-02-05 [1] CRAN (R 3.6.0)
## P jsonlite 1.6.1 2020-02-02 [?] CRAN (R 3.6.0)
## P KernSmooth 2.23-16 2019-10-15 [?] CRAN (R 3.6.2)
## knitr 1.28 2020-02-06 [1] CRAN (R 3.6.0)
## P labeling 0.3 2014-08-23 [?] CRAN (R 3.6.0)
## P lattice 0.20-40 2020-02-19 [?] CRAN (R 3.6.0)
## P lazyeval 0.2.2 2019-03-15 [?] CRAN (R 3.6.0)
## P leiden 0.3.3 2020-02-04 [?] CRAN (R 3.6.0)
## P lifecycle 0.2.0 2020-03-06 [?] CRAN (R 3.6.0)
## P listenv 0.8.0 2019-12-05 [?] CRAN (R 3.6.0)
## P lmtest 0.9-37 2019-04-30 [?] CRAN (R 3.6.0)
## P lsei 1.2-0 2017-10-23 [?] CRAN (R 3.6.0)
## P magrittr 1.5 2014-11-22 [?] CRAN (R 3.6.0)
## P MASS 7.3-51.5 2019-12-20 [?] CRAN (R 3.6.0)
## P Matrix 1.2-18 2019-11-27 [?] CRAN (R 3.6.2)
## matrixStats * 0.56.0 2020-03-13 [1] CRAN (R 3.6.0)
## P metap 1.3 2020-01-23 [?] CRAN (R 3.6.0)
## P mnormt 1.5-6 2020-02-03 [?] CRAN (R 3.6.0)
## P multcomp 1.4-13 2020-04-08 [?] CRAN (R 3.6.2)
## multtest 2.42.0 2019-10-29 [1] Bioconductor
## P munsell 0.5.0 2018-06-12 [?] CRAN (R 3.6.0)
## P mutoss 0.1-12 2017-12-04 [?] CRAN (R 3.6.0)
## P mvtnorm 1.1-0 2020-02-24 [?] CRAN (R 3.6.0)
## P nlme 3.1-142 2019-11-07 [?] CRAN (R 3.6.2)
## P npsurv 0.4-0 2017-10-14 [?] CRAN (R 3.6.0)
## P numDeriv 2016.8-1.1 2019-06-06 [?] CRAN (R 3.6.0)
## P patchwork 1.0.0 2019-12-01 [?] CRAN (R 3.6.0)
## P pbapply 1.4-2 2019-08-31 [?] CRAN (R 3.6.0)
## P pillar 1.4.3 2019-12-20 [?] CRAN (R 3.6.0)
## P pkgconfig 2.0.3 2019-09-22 [?] CRAN (R 3.6.0)
## P plotly 4.9.2.1 2020-04-04 [?] CRAN (R 3.6.2)
## P plotrix 3.7-7 2019-12-05 [?] CRAN (R 3.6.0)
## P plyr 1.8.6 2020-03-03 [?] CRAN (R 3.6.0)
## P png 0.1-7 2013-12-03 [?] CRAN (R 3.6.0)
## P purrr 0.3.3 2019-10-18 [?] CRAN (R 3.6.0)
## P R6 2.4.1 2019-11-12 [?] CRAN (R 3.6.0)
## P RANN 2.6.1 2019-01-08 [?] CRAN (R 3.6.0)
## P RColorBrewer 1.1-2 2014-12-07 [?] CRAN (R 3.6.0)
## P Rcpp 1.0.4.6 2020-04-09 [?] CRAN (R 3.6.2)
## RcppAnnoy 0.0.16 2020-03-08 [1] CRAN (R 3.6.0)
## RCurl 1.98-1.1 2020-01-19 [1] CRAN (R 3.6.0)
## P Rdpack 0.11-1 2019-12-14 [?] CRAN (R 3.6.0)
## P renv 0.9.3 2020-02-10 [?] CRAN (R 3.6.2)
## P reshape2 1.4.4 2020-04-09 [?] CRAN (R 3.6.2)
## P reticulate * 1.15 2020-04-02 [?] CRAN (R 3.6.2)
## P rlang 0.4.5 2020-03-01 [?] CRAN (R 3.6.0)
## rmarkdown 2.1 2020-01-20 [1] CRAN (R 3.6.0)
## P rmdformats 0.3.7 2020-03-11 [?] CRAN (R 3.6.0)
## P ROCR 1.0-7 2015-03-26 [?] CRAN (R 3.6.0)
## rsvd 1.0.3 2020-02-17 [1] CRAN (R 3.6.0)
## P Rtsne 0.15 2018-11-10 [?] CRAN (R 3.6.0)
## S4Vectors * 0.24.4 2020-04-09 [1] Bioconductor
## P sandwich 2.5-1 2019-04-06 [?] CRAN (R 3.6.0)
## P scales 1.1.0 2019-11-18 [?] CRAN (R 3.6.0)
## scater * 1.14.6 2019-12-16 [1] Bioconductor
## P sctransform 0.2.1 2019-12-17 [?] CRAN (R 3.6.0)
## P sessioninfo 1.1.1 2018-11-05 [?] CRAN (R 3.6.0)
## P Seurat * 3.1.4 2020-02-26 [?] CRAN (R 3.6.0)
## SingleCellExperiment * 1.8.0 2019-10-29 [1] Bioconductor
## P sn 1.6-1 2020-04-01 [?] CRAN (R 3.6.2)
## P stringi 1.4.6 2020-02-17 [?] CRAN (R 3.6.0)
## stringr 1.4.0 2019-02-10 [1] CRAN (R 3.6.0)
## SummarizedExperiment * 1.16.1 2019-12-19 [1] Bioconductor
## P survival 3.1-8 2019-12-03 [?] CRAN (R 3.6.2)
## P TFisher 0.2.0 2018-03-21 [?] CRAN (R 3.6.0)
## P TH.data 1.0-10 2019-01-21 [?] CRAN (R 3.6.0)
## P tibble 3.0.0 2020-03-30 [?] CRAN (R 3.6.2)
## P tidyr 1.0.2 2020-01-24 [?] CRAN (R 3.6.0)
## P tidyselect 1.0.0 2020-01-27 [?] CRAN (R 3.6.0)
## P tsne 0.1-3 2016-07-15 [?] CRAN (R 3.6.0)
## P uwot 0.1.8 2020-03-16 [?] CRAN (R 3.6.0)
## P vctrs 0.2.4 2020-03-10 [?] CRAN (R 3.6.0)
## vipor 0.4.5 2017-03-22 [1] CRAN (R 3.6.0)
## viridis 0.5.1 2018-03-29 [1] CRAN (R 3.6.0)
## P viridisLite 0.3.0 2018-02-01 [?] CRAN (R 3.6.0)
## P withr 2.1.2 2018-03-15 [?] CRAN (R 3.6.0)
## P xfun 0.13 2020-04-13 [?] CRAN (R 3.6.2)
## XVector 0.26.0 2019-10-29 [1] Bioconductor
## yaml 2.2.1 2020-02-01 [1] CRAN (R 3.6.0)
## zlibbioc 1.32.0 2019-10-29 [1] Bioconductor
## P zoo 1.8-7 2020-01-10 [?] CRAN (R 3.6.0)
##
## [1] /Users/luke.zappia/Documents/Projects/scanpy-in-R/renv/library/R-3.6/x86_64-apple-darwin15.6.0
## [2] /private/var/folders/rj/60lhr791617422kqvh0r4vy40000gn/T/RtmpvtfkXH/renv-system-library
##
## P ── Loaded and on-disk path mismatch.
6.2 R environment
R packages installed in the repository for this tutorial. Note that some of these are only requried to build the HTML output document and are not required to run the code in the tutorial.
Click here
## {
## "R": {
## "Version": "3.6.2",
## "Repositories": [
## {
## "Name": "CRAN",
## "URL": "https://cran.rstudio.com"
## }
## ]
## },
## "Bioconductor": {
## "Version": "3.10"
## },
## "Python": {
## "Version": "3.6.10",
## "Type": "conda",
## "Name": null
## },
## "Packages": {
## "BH": {
## "Package": "BH",
## "Version": "1.72.0-3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "8f9ce74c6417d61f0782cbae5fd2b7b0"
## },
## "Biobase": {
## "Package": "Biobase",
## "Version": "2.46.0",
## "Source": "Bioconductor",
## "Hash": "ddbfe185296ede75aadb84a51724ac88"
## },
## "BiocGenerics": {
## "Package": "BiocGenerics",
## "Version": "0.32.0",
## "Source": "Bioconductor",
## "Hash": "b2dabf833cc349c2cd9cba38de7af085"
## },
## "BiocManager": {
## "Package": "BiocManager",
## "Version": "1.30.10",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "db75371846625725e221470b310da1d5"
## },
## "BiocNeighbors": {
## "Package": "BiocNeighbors",
## "Version": "1.4.2",
## "Source": "Bioconductor",
## "Hash": "7efabfe65f1a19d9393a18165291da4d"
## },
## "BiocParallel": {
## "Package": "BiocParallel",
## "Version": "1.20.1",
## "Source": "Bioconductor",
## "Hash": "744ce1b8f59ad5827fe03f30a4fe8e50"
## },
## "BiocSingular": {
## "Package": "BiocSingular",
## "Version": "1.2.2",
## "Source": "Bioconductor",
## "Hash": "f7ddc50823c540769c5e09b6680fcbc8"
## },
## "BiocVersion": {
## "Package": "BiocVersion",
## "Version": "3.10.1",
## "Source": "Bioconductor",
## "Hash": "b69e4e634db423b8e6c58103d579ec95"
## },
## "DelayedArray": {
## "Package": "DelayedArray",
## "Version": "0.12.3",
## "Source": "Bioconductor",
## "Hash": "b6d613d1e53206ce39aa7a27a1704486"
## },
## "DelayedMatrixStats": {
## "Package": "DelayedMatrixStats",
## "Version": "1.8.0",
## "Source": "Bioconductor",
## "Hash": "1071302d3371eb4170b03b9ebf66760a"
## },
## "FNN": {
## "Package": "FNN",
## "Version": "1.1.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "b56998fff55e4a4b4860ad6e8c67e0f9"
## },
## "GenomeInfoDb": {
## "Package": "GenomeInfoDb",
## "Version": "1.22.1",
## "Source": "Bioconductor",
## "Hash": "df46d6ce62f1e897fecbfc5e847d823c"
## },
## "GenomeInfoDbData": {
## "Package": "GenomeInfoDbData",
## "Version": "1.2.2",
## "Source": "Bioconductor",
## "Hash": "de42132c04371f624cdea8de86e8fc5d"
## },
## "GenomicRanges": {
## "Package": "GenomicRanges",
## "Version": "1.38.0",
## "Source": "Bioconductor",
## "Hash": "8ff54983afa8eda100fa0fcadd6816bf"
## },
## "HDF5Array": {
## "Package": "HDF5Array",
## "Version": "1.14.4",
## "Source": "Bioconductor",
## "Hash": "95944feb6cff540c92031a09309f3bef"
## },
## "IRanges": {
## "Package": "IRanges",
## "Version": "2.20.2",
## "Source": "Bioconductor",
## "Hash": "148fe882b25f679b03afc45da15e760c"
## },
## "KernSmooth": {
## "Package": "KernSmooth",
## "Version": "2.23-16",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "997471f25a7ed6c782f0090ce52cc63a"
## },
## "MASS": {
## "Package": "MASS",
## "Version": "7.3-51.5",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "9efe80472b21189ebab1b74169808c26"
## },
## "Matrix": {
## "Package": "Matrix",
## "Version": "1.2-18",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "08588806cba69f04797dab50627428ed"
## },
## "MatrixModels": {
## "Package": "MatrixModels",
## "Version": "0.4-1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "d57ac35220b39c591388ab3a080f9cbe"
## },
## "R6": {
## "Package": "R6",
## "Version": "2.4.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "292b54f8f4b94669b08f94e5acce6be2"
## },
## "RANN": {
## "Package": "RANN",
## "Version": "2.6.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "d128ea05a972d3e67c6f39de52c72bd7"
## },
## "RColorBrewer": {
## "Package": "RColorBrewer",
## "Version": "1.1-2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "e031418365a7f7a766181ab5a41a5716"
## },
## "RCurl": {
## "Package": "RCurl",
## "Version": "1.98-1.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "26b1263f36bd66a9e8b5c80753ebedea"
## },
## "ROCR": {
## "Package": "ROCR",
## "Version": "1.0-7",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "fd202bb77d2b1b19fb9dcc393d489ef0"
## },
## "RSpectra": {
## "Package": "RSpectra",
## "Version": "0.16-0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "a41329d24d5a98eaed2bd0159adb1b5f"
## },
## "Rcpp": {
## "Package": "Rcpp",
## "Version": "1.0.4.6",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "e652f23d8b1807cc975c51410d05b72f"
## },
## "RcppAnnoy": {
## "Package": "RcppAnnoy",
## "Version": "0.0.16",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "076352082c0cd6e24e87649d4e656e2f"
## },
## "RcppEigen": {
## "Package": "RcppEigen",
## "Version": "0.3.3.7.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "c6faf038ba4346b1de19ad7c99b8f94a"
## },
## "RcppHNSW": {
## "Package": "RcppHNSW",
## "Version": "0.2.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "3224f3204b7a8be299b3f939c07025ad"
## },
## "RcppProgress": {
## "Package": "RcppProgress",
## "Version": "0.4.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "1c0aa18b97e6aaa17f93b8b866c0ace5"
## },
## "Rdpack": {
## "Package": "Rdpack",
## "Version": "0.11-1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "41999a971efe596c3715f2601030cd79"
## },
## "Rhdf5lib": {
## "Package": "Rhdf5lib",
## "Version": "1.8.0",
## "Source": "Bioconductor",
## "Hash": "4a3bef5117511bfc1a0b23fddd7585ef"
## },
## "Rtsne": {
## "Package": "Rtsne",
## "Version": "0.15",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "f153432c4ca15b937ccfaa40f167c892"
## },
## "S4Vectors": {
## "Package": "S4Vectors",
## "Version": "0.24.4",
## "Source": "Bioconductor",
## "Hash": "e338665aea0ba0bbf7615d318b2eccee"
## },
## "Seurat": {
## "Package": "Seurat",
## "Version": "3.1.4",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "687418116139a0eddade5f43aa85db2f"
## },
## "SingleCellExperiment": {
## "Package": "SingleCellExperiment",
## "Version": "1.8.0",
## "Source": "Bioconductor",
## "Hash": "cfacead44b3a501a8d782af94cc7e2c9"
## },
## "SparseM": {
## "Package": "SparseM",
## "Version": "1.78",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "fbe4ac267bf42a91e495cc68ad3f8b63"
## },
## "SummarizedExperiment": {
## "Package": "SummarizedExperiment",
## "Version": "1.16.1",
## "Source": "Bioconductor",
## "Hash": "1f4c0859b8f338bd9f8c0b7967e719a3"
## },
## "TFisher": {
## "Package": "TFisher",
## "Version": "0.2.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "e6b216a490aaae020d2ac09e1e0988b5"
## },
## "TH.data": {
## "Package": "TH.data",
## "Version": "1.0-10",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "84dffc44f23c419537c1c79cc46347a5"
## },
## "XVector": {
## "Package": "XVector",
## "Version": "0.26.0",
## "Source": "Bioconductor",
## "Hash": "b72b7c53049b71fbfd0792fb7ec66987"
## },
## "ape": {
## "Package": "ape",
## "Version": "5.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "35b0c2165569c94550d5e28b5a792b2f"
## },
## "askpass": {
## "Package": "askpass",
## "Version": "1.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "e8a22846fff485f0be3770c2da758713"
## },
## "assertthat": {
## "Package": "assertthat",
## "Version": "0.2.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "50c838a310445e954bc13f26f26a6ecf"
## },
## "backports": {
## "Package": "backports",
## "Version": "1.1.6",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "3997fd62345a616e59e8161ee0a5816f"
## },
## "base64enc": {
## "Package": "base64enc",
## "Version": "0.1-3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "543776ae6848fde2f48ff3816d0628bc"
## },
## "beachmat": {
## "Package": "beachmat",
## "Version": "2.2.1",
## "Source": "Bioconductor",
## "Hash": "13b4829abeb942aea40478bf235c4e0b"
## },
## "beeswarm": {
## "Package": "beeswarm",
## "Version": "0.2.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "dc538ec663e38888807ef3034489403d"
## },
## "bibtex": {
## "Package": "bibtex",
## "Version": "0.4.2.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "8d96f3da9e7ec851e14e39c0872ad1ab"
## },
## "bitops": {
## "Package": "bitops",
## "Version": "1.0-6",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "0b118d5900596bae6c4d4865374536a6"
## },
## "bookdown": {
## "Package": "bookdown",
## "Version": "0.18",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "72e9c52caf3f7aacb4e368b75f6ec72a"
## },
## "caTools": {
## "Package": "caTools",
## "Version": "1.18.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "6f7c1405e500ef25a7c147e860b5fe32"
## },
## "callr": {
## "Package": "callr",
## "Version": "3.4.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "643163a00cb536454c624883a10ae0bc"
## },
## "cli": {
## "Package": "cli",
## "Version": "2.0.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "ff0becff7bfdfe3f75d29aff8f3172dd"
## },
## "cluster": {
## "Package": "cluster",
## "Version": "2.1.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "db63a44aab5aadcb6bf2f129751d129a"
## },
## "codetools": {
## "Package": "codetools",
## "Version": "0.2-16",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "89cf4b8207269ccf82fbeb6473fd662b"
## },
## "colorspace": {
## "Package": "colorspace",
## "Version": "1.4-1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "6b436e95723d1f0e861224dd9b094dfb"
## },
## "cowplot": {
## "Package": "cowplot",
## "Version": "1.0.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "82bae0172ae9d4c4f88a440ad01f73bb"
## },
## "crayon": {
## "Package": "crayon",
## "Version": "1.3.4",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "0d57bc8e27b7ba9e45dba825ebc0de6b"
## },
## "crosstalk": {
## "Package": "crosstalk",
## "Version": "1.1.0.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "ae55f5d7c02f0ab43c58dd050694f2b4"
## },
## "curl": {
## "Package": "curl",
## "Version": "4.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "2b7d10581cc730804e9ed178c8374bd6"
## },
## "data.table": {
## "Package": "data.table",
## "Version": "1.12.8",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "cd711af60c47207a776213a368626369"
## },
## "desc": {
## "Package": "desc",
## "Version": "1.2.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "6c8fe8fa26a23b79949375d372c7b395"
## },
## "digest": {
## "Package": "digest",
## "Version": "0.6.25",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "f697db7d92b7028c4b3436e9603fb636"
## },
## "dplyr": {
## "Package": "dplyr",
## "Version": "0.8.5",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "57a42ddf80f429764ff7987128c3fd0a"
## },
## "dqrng": {
## "Package": "dqrng",
## "Version": "0.2.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "cc0d03e8383d407e9568855f8efbc07d"
## },
## "ellipsis": {
## "Package": "ellipsis",
## "Version": "0.3.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "7067d90c1c780bfe80c0d497e3d7b49d"
## },
## "evaluate": {
## "Package": "evaluate",
## "Version": "0.14",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "ec8ca05cffcc70569eaaad8469d2a3a7"
## },
## "fansi": {
## "Package": "fansi",
## "Version": "0.4.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "7fce217eaaf8016e72065e85c73027b5"
## },
## "farver": {
## "Package": "farver",
## "Version": "2.0.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "dad6793a5a1f73c8e91f1a1e3e834b05"
## },
## "fitdistrplus": {
## "Package": "fitdistrplus",
## "Version": "1.0-14",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "690f753a275a336022edcffcec5f9aea"
## },
## "formatR": {
## "Package": "formatR",
## "Version": "1.7",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "ad36e26eeeb7393886d8a0e19bc6ee42"
## },
## "futile.logger": {
## "Package": "futile.logger",
## "Version": "1.4.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "99f0ace8c05ec7d3683d27083c4f1e7e"
## },
## "futile.options": {
## "Package": "futile.options",
## "Version": "1.0.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "0d9bf02413ddc2bbe8da9ce369dcdd2b"
## },
## "future": {
## "Package": "future",
## "Version": "1.16.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "20c20385da360f28c07364f2d099a6d7"
## },
## "future.apply": {
## "Package": "future.apply",
## "Version": "1.4.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "a690d4bb5e287dc499229617a944dc39"
## },
## "gbRd": {
## "Package": "gbRd",
## "Version": "0.4-11",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "dd324973735626ce23e950a5f2d3d8ee"
## },
## "gdata": {
## "Package": "gdata",
## "Version": "2.18.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "465ccb84427f5fe2c54f8620666db131"
## },
## "ggbeeswarm": {
## "Package": "ggbeeswarm",
## "Version": "0.6.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "dd68b9b215b2d3119603549a794003c3"
## },
## "ggplot2": {
## "Package": "ggplot2",
## "Version": "3.3.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "911561e07da928345f1ae2d69f97f3ea"
## },
## "ggrepel": {
## "Package": "ggrepel",
## "Version": "0.8.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "c013a50b19695daf04853679e1bc105a"
## },
## "ggridges": {
## "Package": "ggridges",
## "Version": "0.5.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "b5c4e55a3856dff3c05595630a40edfc"
## },
## "globals": {
## "Package": "globals",
## "Version": "0.12.5",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "e9e529fb7a579ad4b4ff65e052e76ed8"
## },
## "glue": {
## "Package": "glue",
## "Version": "1.4.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "2aefa994e8df5da17dc09afd80f924d5"
## },
## "gplots": {
## "Package": "gplots",
## "Version": "3.0.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "8c9dd0fe4766504762688b9f1de3139e"
## },
## "gridExtra": {
## "Package": "gridExtra",
## "Version": "2.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "7d7f283939f563670a697165b2cf5560"
## },
## "gtable": {
## "Package": "gtable",
## "Version": "0.3.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "ac5c6baf7822ce8732b343f14c072c4d"
## },
## "gtools": {
## "Package": "gtools",
## "Version": "3.8.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "0a749b4458d19a54acae93c64e3e7c85"
## },
## "hexbin": {
## "Package": "hexbin",
## "Version": "1.28.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "3d59212f2814d65dff517e6899813c58"
## },
## "highr": {
## "Package": "highr",
## "Version": "0.8",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "4dc5bb88961e347a0f4d8aad597cbfac"
## },
## "htmltools": {
## "Package": "htmltools",
## "Version": "0.4.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "2d7691222f82f41e93f6d30f169bd5e1"
## },
## "htmlwidgets": {
## "Package": "htmlwidgets",
## "Version": "1.5.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "41bace23583fbc25089edae324de2dc3"
## },
## "httr": {
## "Package": "httr",
## "Version": "1.4.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "7146fea4685b4252ebf478978c75f597"
## },
## "ica": {
## "Package": "ica",
## "Version": "1.0-2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "95ba9b882bb834ecbdad37338a11f3f8"
## },
## "igraph": {
## "Package": "igraph",
## "Version": "1.2.5",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "3878c30ce67cdb7f2d7f72554e37f476"
## },
## "irlba": {
## "Package": "irlba",
## "Version": "2.3.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "a9ad517358000d57022401ef18ee657a"
## },
## "isoband": {
## "Package": "isoband",
## "Version": "0.2.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "9b2f7cf1899f583a36d367702ecf49a3"
## },
## "jsonlite": {
## "Package": "jsonlite",
## "Version": "1.6.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "84b0ee361e2f78d6b7d670db9471c0c5"
## },
## "knitr": {
## "Package": "knitr",
## "Version": "1.28",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "915a6f0134cdbdf016d7778bc80b2eda"
## },
## "labeling": {
## "Package": "labeling",
## "Version": "0.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "73832978c1de350df58108c745ed0e3e"
## },
## "lambda.r": {
## "Package": "lambda.r",
## "Version": "1.2.4",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "b1e925c4b9ffeb901bacf812cbe9a6ad"
## },
## "later": {
## "Package": "later",
## "Version": "1.0.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "6d927978fc658d24175ce37db635f9e5"
## },
## "lattice": {
## "Package": "lattice",
## "Version": "0.20-40",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "61339152c288b871facca5f68f401f89"
## },
## "lazyeval": {
## "Package": "lazyeval",
## "Version": "0.2.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "d908914ae53b04d4c0c0fd72ecc35370"
## },
## "leiden": {
## "Package": "leiden",
## "Version": "0.3.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "b558ae02ba3ad5a3f015de3e8208c0a4"
## },
## "lifecycle": {
## "Package": "lifecycle",
## "Version": "0.2.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "361811f31f71f8a617a9a68bf63f1f42"
## },
## "listenv": {
## "Package": "listenv",
## "Version": "0.8.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "0bde42ee282efb18c7c4e63822f5b4f7"
## },
## "lmtest": {
## "Package": "lmtest",
## "Version": "0.9-37",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "c108129ded5ffdb129064ec1d7ba77d0"
## },
## "lsei": {
## "Package": "lsei",
## "Version": "1.2-0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "75f28bb3d161432f11a63a7a56b1ffdc"
## },
## "magrittr": {
## "Package": "magrittr",
## "Version": "1.5",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "1bb58822a20301cee84a41678e25d9b7"
## },
## "markdown": {
## "Package": "markdown",
## "Version": "1.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "61e4a10781dd00d7d81dd06ca9b94e95"
## },
## "matrixStats": {
## "Package": "matrixStats",
## "Version": "0.56.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "d16f18aeb023d7a80c090d9458fc75a6"
## },
## "metap": {
## "Package": "metap",
## "Version": "1.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "618d4f26eaf3cde5b5bb7c40387154e3"
## },
## "mgcv": {
## "Package": "mgcv",
## "Version": "1.8-31",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "4bb7e0c4f3557583e1e8d3c9ffb8ba5c"
## },
## "mime": {
## "Package": "mime",
## "Version": "0.9",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "e87a35ec73b157552814869f45a63aa3"
## },
## "mnormt": {
## "Package": "mnormt",
## "Version": "1.5-6",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "f4c908c3d498f2ed076cb1746dc8b0db"
## },
## "multcomp": {
## "Package": "multcomp",
## "Version": "1.4-13",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "b3a36caf2e30d4551a0b7dce274057bb"
## },
## "multtest": {
## "Package": "multtest",
## "Version": "2.42.0",
## "Source": "Bioconductor",
## "Hash": "8dbb186639bbb7580d90f44a1776639f"
## },
## "munsell": {
## "Package": "munsell",
## "Version": "0.5.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "6dfe8bf774944bd5595785e3229d8771"
## },
## "mutoss": {
## "Package": "mutoss",
## "Version": "0.1-12",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "0aa141265a2f405ac251e8fb58c0971b"
## },
## "mvtnorm": {
## "Package": "mvtnorm",
## "Version": "1.1-0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "b4467e29ec60b2d05e361c9141e4fc59"
## },
## "nlme": {
## "Package": "nlme",
## "Version": "3.1-142",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "557d78d7eac2c1090ee58647a6274142"
## },
## "npsurv": {
## "Package": "npsurv",
## "Version": "0.4-0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "63576bc6d9730443164d9108c7c05044"
## },
## "numDeriv": {
## "Package": "numDeriv",
## "Version": "2016.8-1.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "df58958f293b166e4ab885ebcad90e02"
## },
## "openssl": {
## "Package": "openssl",
## "Version": "1.4.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "49f7258fd86ebeaea1df24d9ded00478"
## },
## "patchwork": {
## "Package": "patchwork",
## "Version": "1.0.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "16eee5b5edc41eec5af1149ccdc6b2c9"
## },
## "pbapply": {
## "Package": "pbapply",
## "Version": "1.4-2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "ee90507ce37987b22470fae76325f370"
## },
## "pillar": {
## "Package": "pillar",
## "Version": "1.4.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "fa3ed60396b6998d0427c57dab90fba4"
## },
## "pkgbuild": {
## "Package": "pkgbuild",
## "Version": "1.0.6",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "899835dfe286963471cbdb9591f8f94f"
## },
## "pkgconfig": {
## "Package": "pkgconfig",
## "Version": "2.0.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "01f28d4278f15c76cddbea05899c5d6f"
## },
## "pkgload": {
## "Package": "pkgload",
## "Version": "1.0.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "5e655fb54cceead0f095f22d7be33da3"
## },
## "plogr": {
## "Package": "plogr",
## "Version": "0.2.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "09eb987710984fc2905c7129c7d85e65"
## },
## "plotly": {
## "Package": "plotly",
## "Version": "4.9.2.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "b08edf378e0e38959a6983e3d5902795"
## },
## "plotrix": {
## "Package": "plotrix",
## "Version": "3.7-7",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "f273659b57b53ead904028360b93ba68"
## },
## "plyr": {
## "Package": "plyr",
## "Version": "1.8.6",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "ec0e5ab4e5f851f6ef32cd1d1984957f"
## },
## "png": {
## "Package": "png",
## "Version": "0.1-7",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "03b7076c234cb3331288919983326c55"
## },
## "praise": {
## "Package": "praise",
## "Version": "1.0.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "a555924add98c99d2f411e37e7d25e9f"
## },
## "prettyunits": {
## "Package": "prettyunits",
## "Version": "1.1.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "95ef9167b75dde9d2ccc3c7528393e7e"
## },
## "processx": {
## "Package": "processx",
## "Version": "3.4.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "20a082f2bde0ffcd8755779fd476a274"
## },
## "promises": {
## "Package": "promises",
## "Version": "1.1.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "efbbe62da4709f7040a380c702bc7103"
## },
## "ps": {
## "Package": "ps",
## "Version": "1.3.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "98777535b61c57d1749344345e2a4ccd"
## },
## "purrr": {
## "Package": "purrr",
## "Version": "0.3.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "22aca7d1181718e927d403a8c2d69d62"
## },
## "quantreg": {
## "Package": "quantreg",
## "Version": "5.55",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "dc0f41e5f60efc5fdbdb35a51a4028c5"
## },
## "rappdirs": {
## "Package": "rappdirs",
## "Version": "0.3.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "8c8298583adbbe76f3c2220eef71bebc"
## },
## "renv": {
## "Package": "renv",
## "Version": "0.9.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "c1a367437d8a8a44bec4b9d4974cb20c"
## },
## "reshape2": {
## "Package": "reshape2",
## "Version": "1.4.4",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "bb5996d0bd962d214a11140d77589917"
## },
## "reticulate": {
## "Package": "reticulate",
## "Version": "1.15",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "ba447f1ad910156609e8e37b52e752e3"
## },
## "rhdf5": {
## "Package": "rhdf5",
## "Version": "2.30.1",
## "Source": "Bioconductor",
## "Hash": "413d578e76ee631eaf479d9b98841bf8"
## },
## "rlang": {
## "Package": "rlang",
## "Version": "0.4.5",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "1cc1b38e4db40ea6eb19ab8080bbed3b"
## },
## "rmarkdown": {
## "Package": "rmarkdown",
## "Version": "2.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "9d1c61d476c448350c482d6664e1b28b"
## },
## "rmdformats": {
## "Package": "rmdformats",
## "Version": "0.3.7",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "8bfe9a47bab2fd83f6efd1faeed28034"
## },
## "rprojroot": {
## "Package": "rprojroot",
## "Version": "1.3-2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "f6a407ae5dd21f6f80a6708bbb6eb3ae"
## },
## "rstudioapi": {
## "Package": "rstudioapi",
## "Version": "0.11",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "33a5b27a03da82ac4b1d43268f80088a"
## },
## "rsvd": {
## "Package": "rsvd",
## "Version": "1.0.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "3a6b30449282b6a4b19ce267142c3299"
## },
## "sandwich": {
## "Package": "sandwich",
## "Version": "2.5-1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "510d1f864cd565d8119801a49db4fd85"
## },
## "scales": {
## "Package": "scales",
## "Version": "1.1.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "a1c68369c629ea3188d0676e37069c65"
## },
## "scater": {
## "Package": "scater",
## "Version": "1.14.6",
## "Source": "Bioconductor",
## "Hash": "20ff4807d30e7dfa01912a3396d71981"
## },
## "sctransform": {
## "Package": "sctransform",
## "Version": "0.2.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "61f43457038016e2aa1f0fce3867718f"
## },
## "sessioninfo": {
## "Package": "sessioninfo",
## "Version": "1.1.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "308013098befe37484df72c39cf90d6e"
## },
## "sitmo": {
## "Package": "sitmo",
## "Version": "2.0.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "0f9ba299f2385e686745b066c6d7a7c4"
## },
## "sn": {
## "Package": "sn",
## "Version": "1.6-1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "79ba68cf0b686c9f7d24825cd5a8493e"
## },
## "snow": {
## "Package": "snow",
## "Version": "0.4-3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "11b822ad6214111a4188d5e5fd1b144c"
## },
## "stringi": {
## "Package": "stringi",
## "Version": "1.4.6",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "e99d8d656980d2dd416a962ae55aec90"
## },
## "stringr": {
## "Package": "stringr",
## "Version": "1.4.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "0759e6b6c0957edb1311028a49a35e76"
## },
## "survival": {
## "Package": "survival",
## "Version": "3.1-8",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "ad25122f95d04988f6f79d69aaadd53d"
## },
## "sys": {
## "Package": "sys",
## "Version": "3.3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "507f3116a38d37ad330a038b3be07b66"
## },
## "testthat": {
## "Package": "testthat",
## "Version": "2.3.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "0829b987b8961fb07f3b1b64a2fbc495"
## },
## "tibble": {
## "Package": "tibble",
## "Version": "3.0.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "e742bc8d72071ef9aba29f71f132d773"
## },
## "tidyr": {
## "Package": "tidyr",
## "Version": "1.0.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "fb73a010ace00d6c584c2b53a21b969c"
## },
## "tidyselect": {
## "Package": "tidyselect",
## "Version": "1.0.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "7d4b0f1ab542d8cb7a40c593a4de2f36"
## },
## "tinytex": {
## "Package": "tinytex",
## "Version": "0.21",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "02e11a2e5d05f1d5ab19394f19ab2999"
## },
## "tsne": {
## "Package": "tsne",
## "Version": "0.1-3",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "7a6f77f5bdfa8a876f4995b8accfa68b"
## },
## "utf8": {
## "Package": "utf8",
## "Version": "1.1.4",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "4a5081acfb7b81a572e4384a7aaf2af1"
## },
## "uwot": {
## "Package": "uwot",
## "Version": "0.1.8",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "094c1c4b1dad5a5aa84adafe5cd6d076"
## },
## "vctrs": {
## "Package": "vctrs",
## "Version": "0.2.4",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "6c839a149a30cb4ffc70443efa74c197"
## },
## "vipor": {
## "Package": "vipor",
## "Version": "0.4.5",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "ea85683da7f2bfa63a98dc6416892591"
## },
## "viridis": {
## "Package": "viridis",
## "Version": "0.5.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "6f6b49e5b3b5ee5a6d0c28bf1b4b9eb3"
## },
## "viridisLite": {
## "Package": "viridisLite",
## "Version": "0.3.0",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "ce4f6271baa94776db692f1cb2055bee"
## },
## "withr": {
## "Package": "withr",
## "Version": "2.1.2",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "aa57ed55ff2df4bea697a07df528993d"
## },
## "xfun": {
## "Package": "xfun",
## "Version": "0.13",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "3c1eeacd705ff1695db94bfd443b8a84"
## },
## "yaml": {
## "Package": "yaml",
## "Version": "2.2.1",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "2826c5d9efb0a88f657c7a679c7106db"
## },
## "zlibbioc": {
## "Package": "zlibbioc",
## "Version": "1.32.0",
## "Source": "Bioconductor",
## "Hash": "f7a31247eadfb45098bcf2e8c4aebb49"
## },
## "zoo": {
## "Package": "zoo",
## "Version": "1.8-7",
## "Source": "Repository",
## "Repository": "CRAN",
## "Hash": "157e0e442de69a5b00ee5c7066d6184d"
## }
## }
## }
6.3 Python environment
Python packages installed in the repository for this tutorial.
Click here
## name: null
## channels:
## - conda-forge
## - bioconda
## - defaults
## dependencies:
## - anndata=0.7.1=py36_0
## - blosc=1.18.1=h4a8c4bd_0
## - bzip2=1.0.8=h0b31af3_2
## - ca-certificates=2020.4.5.1=hecc5488_0
## - cairo=1.16.0=hec6a9b0_1003
## - certifi=2020.4.5.1=py36h9f0ad1d_0
## - cycler=0.10.0=py_2
## - decorator=4.4.2=py_0
## - fontconfig=2.13.1=h6b1039f_1001
## - freetype=2.10.1=h8da9a1a_0
## - get_version=2.1=py_1
## - gettext=0.19.8.1=h46ab8bc_1002
## - glib=2.58.3=py36hb0ce7ff_1004
## - gmp=6.2.0=h4a8c4bd_2
## - h5py=2.10.0=nompi_py36h106b333_102
## - hdf5=1.10.5=nompi_h3e39495_1104
## - icu=64.2=h6de7cb9_1
## - igraph=0.8.0=h91b20c2_0
## - importlib-metadata=1.6.0=py36h9f0ad1d_0
## - importlib_metadata=1.6.0=0
## - joblib=0.14.1=py_0
## - kiwisolver=1.2.0=py36h863e41a_0
## - legacy-api-wrap=1.2=py_0
## - libblas=3.8.0=16_openblas
## - libcblas=3.8.0=16_openblas
## - libcxx=10.0.0=0
## - libffi=3.2.1=h4a8c4bd_1007
## - libgfortran=4.0.0=2
## - libiconv=1.15=h0b31af3_1006
## - liblapack=3.8.0=16_openblas
## - libllvm8=8.0.1=h770b8ee_0
## - libopenblas=0.3.9=h3d69b6c_0
## - libpng=1.6.37=hbbe82c9_1
## - libxml2=2.9.10=h53d96d6_0
## - llvm-openmp=10.0.0=h28b9765_0
## - llvmlite=0.31.0=py36hde82470_1
## - louvain=0.6.1=py36hfc679d8_1
## - matplotlib-base=3.2.1=py36h83d3ec1_0
## - mock=3.0.5=py36h9f0ad1d_1
## - natsort=7.0.1=py_0
## - ncurses=6.1=h0a44026_1002
## - networkx=2.4=py_1
## - numba=0.48.0=py36h4f17bb1_0
## - numexpr=2.7.1=py36hcc1bba6_1
## - numpy=1.18.1=py36hdc5ca10_1
## - openssl=1.1.1f=h0b31af3_0
## - packaging=20.1=py_0
## - pandas=1.0.3=py36hcc1bba6_0
## - patsy=0.5.1=py_0
## - pcre=8.44=h4a8c4bd_0
## - pip=20.0.2=py_2
## - pixman=0.38.0=h01d97ff_1003
## - pycairo=1.19.1=py36h1ef2672_3
## - pyparsing=2.4.7=pyh9f0ad1d_0
## - pytables=3.6.1=py36h6f8395a_1
## - python=3.6.10=h4334963_1010_cpython
## - python-dateutil=2.8.1=py_0
## - python-igraph=0.8.0=py36hffd003b_1
## - python_abi=3.6=1_cp36m
## - pytz=2019.3=py_0
## - readline=8.0=hcfe32e1_0
## - scanpy=1.4.6=py_0
## - scikit-learn=0.22.2.post1=py36h3dc85bc_0
## - scipy=1.4.1=py36h1dac7e4_3
## - seaborn=0.10.0=py_1
## - setuptools=46.1.3=py36h9f0ad1d_0
## - setuptools-scm=3.5.0=py_1
## - setuptools_scm=3.5.0=1
## - six=1.14.0=py_1
## - sqlite=3.30.1=h93121df_0
## - statsmodels=0.11.1=py36h37b9a7d_1
## - texttable=1.6.2=py_0
## - tk=8.6.10=hbbe82c9_0
## - tornado=6.0.4=py36h37b9a7d_1
## - tqdm=4.45.0=pyh9f0ad1d_0
## - umap-learn=0.4.1=py36h9f0ad1d_0
## - wheel=0.34.2=py_1
## - xz=5.2.5=h0b31af3_0
## - zipp=3.1.0=py_0
## - zlib=1.2.11=h0b31af3_1006
## prefix: /Users/luke.zappia/Documents/Projects/scanpy-in-R/renv/python/condaenvs/renv-python