diff --git a/episodes/03-import-annotate.Rmd b/episodes/03-import-annotate.Rmd index 2ae1993a..e0a72772 100644 --- a/episodes/03-import-annotate.Rmd +++ b/episodes/03-import-annotate.Rmd @@ -46,7 +46,7 @@ If you get any error messages about `there is no package called 'XXXX'` it means ## Load data -In the last episode, we used R to download 4 files from the internet and saved them on our computer. But we do not have these files loaded into R yet so that we can work with them. The original experimental design in [Blackmore et al. 2017](https://pubmed.ncbi.nlm.nih.gov/28696309/) was fairly complex: 8-12 weeks old male and female mice, with two different genetic backgrounds (wild-type and D2D), were collected at Day 0 (before influenza infection), Day 4 and Day 8 after influenza infection. From each mouse, cerebellum and spinal cord tissues were taken for RNA-seq. There were originally 4 mice per 'Sex X Day x Genotype' group, but a few were lost along the way resulting in a total of 45 samples. For this workshop, we are going to simplify the analysis by only using the 22 cerebellum samples. Expression quantification was done using STAR to align to the mouse genome and then counting reads that map to genes. In addition to the counts per gene per sample, we also need information on which sample belongs to which Sex/Time point/Replicate. And for the genes, it is helpful to have extra information called annotation. +In the last episode, we used R to download 4 files from the internet and saved them on our computer. But we do not have these files loaded into R yet so that we can work with them. The original experimental design in [Blackmore et al. 2017](https://pubmed.ncbi.nlm.nih.gov/28696309/) was fairly complex: 8 week old male and female C57BL/6 mice were collected at Day 0 (before influenza infection), Day 4 and Day 8 after influenza infection. From each mouse, cerebellum and spinal cord tissues were taken for RNA-seq. There were originally 4 mice per 'Sex x Time x Tissue' group, but a few were lost along the way resulting in a total of 45 samples. For this workshop, we are going to simplify the analysis by only using the 22 cerebellum samples. Expression quantification was done using STAR to align to the mouse genome and then counting reads that map to genes. In addition to the counts per gene per sample, we also need information on which sample belongs to which Sex/Time point/Replicate. And for the genes, it is helpful to have extra information called annotation. Let's read in the data files that we downloaded in the last episode and start to explore them: @@ -59,7 +59,7 @@ dim(counts) # View(counts) ``` -Genes are in rows and samples are in columns, so we have counts for 41,786 genes and 22 samples. The `View()` command has been comment out for the website, but running it will open a tab in RStudio that lets us look at the data and even sort the table by a particular column. However, the viewer cannot change the data inside the `counts` object, so we can only look, not permanently sort nor edit the entries. When finished, close the viewer using the X in the tab. Looks like the rownames are gene symbols and the column names are the GEO sample IDs, which are not very informative for telling us which sample is what. +Genes are in rows and samples are in columns, so we have counts for 41,786 genes and 22 samples. The `View()` command has been commented out for the website, but running it will open a tab in RStudio that lets us look at the data and even sort the table by a particular column. However, the viewer cannot change the data inside the `counts` object, so we can only look, not permanently sort nor edit the entries. When finished, close the viewer using the X in the tab. Looks like the rownames are gene symbols and the column names are the GEO sample IDs, which are not very informative for telling us which sample is what. ### Sample annotations @@ -349,7 +349,7 @@ manual curation. You can find more information in Bioconductor [Annotation Workshop](https://jmacdon.github.io/Bioc2022Anno/articles/AnnotationWorkshop.html) material. -Bioconductor has many packages and functions that can help you to get additional annotation information for your genes. The available resources are covered in more detail in [Episode 6 Gene set enrichment analysis](https://carpentries-incubator.github.io/bioc-rnaseq/06-gene-set-analysis.html#gene-set-resources). +Bioconductor has many packages and functions that can help you to get additional annotation information for your genes. The available resources are covered in more detail in [Episode 7 Gene set enrichment analysis](https://carpentries-incubator.github.io/bioc-rnaseq/07-gene-set-analysis.html#gene-set-resources). Here, we will introduce one of the gene ID mapping functions, `mapIds`: ``` @@ -357,6 +357,7 @@ mapIds(annopkg, keys, column, keytype, ..., multiVals) ``` Where + - *annopkg* is the annotation package - *keys* are the IDs that we **know** - *column* is the value we **want** diff --git a/episodes/04-exploratory-qc.Rmd b/episodes/04-exploratory-qc.Rmd index e5d3bdab..ef918abe 100644 --- a/episodes/04-exploratory-qc.Rmd +++ b/episodes/04-exploratory-qc.Rmd @@ -169,7 +169,7 @@ meanSdPlot(assay(dds), ranks = FALSE) ``` There are two ways around this: either we develop methods specifically adapted to count data, or we adapt (transform) the count data so that the existing methods are applicable. -Both ways have been explored; however, at the moment the second approach is arguably more widely applied in practice. We can transform our data using DESeq2's variance stablizing transformation and then verify that is had removed the correlation between average read count and variance. +Both ways have been explored; however, at the moment the second approach is arguably more widely applied in practice. We can transform our data using DESeq2's variance stabilizing transformation and then verify that it has removed the correlation between average read count and variance. ```{r mean-sd-plot-vst} vsd <- DESeq2::vst(dds, blind = TRUE) @@ -228,7 +228,7 @@ ggplot(pcaData, aes(x = PC1, y = PC2)) + 1. Assume you are mainly interested in expression changes associated with the time after infection (Reminder Day0 -> before infection). What do you need to consider in downstream analysis? -2. Consider an experimental design where you have multiple sample from the same donor. You are still interested in differences by time and observe the following PCA plot. What does this PCA plot suggest? +2. Consider an experimental design where you have multiple samples from the same donor. You are still interested in differences by time and observe the following PCA plot. What does this PCA plot suggest? ```{r pca-exercise, eval=TRUE, echo=FALSE, include=TRUE} vsd_ex <- vsd @@ -270,7 +270,7 @@ ggplot(pcaData, aes(x = PC1, y = PC2)) + ## Challenge: Plot the PCA colored by library sizes. -Compare before and after variance stablizing transformation. +Compare before and after variance stabilizing transformation. *Hint: The `DESeq2::plotPCA` expect an object of the class `DESeqTransform` as input. You can transform a `SummarizedExperiment` object using `plotPCA(DESeqTransform(se))`* @@ -311,7 +311,7 @@ ggplot(pcaData, aes(x = PC1, y = PC2)) + ## Interactive exploratory data analysis Often it is useful to look at QC plots in an interactive way to directly explore different experimental factors or get insides from someone without coding experience. -Useful tools for interactive exploratory data analysis for RNA-seq are [glimma](https://bioconductor.org/packages/release/bioc/html/Glimma.html) and [iSEE](https://bioconductor.org/packages/release/bioc/html/iSEE.html) +Useful tools for interactive exploratory data analysis for RNA-seq are [Glimma](https://bioconductor.org/packages/release/bioc/html/Glimma.html) and [iSEE](https://bioconductor.org/packages/release/bioc/html/iSEE.html) ::::::::::::::::::::::::::::::::::::::: challenge diff --git a/episodes/05-differential-expression.Rmd b/episodes/05-differential-expression.Rmd index 6996b084..2e6087e4 100644 --- a/episodes/05-differential-expression.Rmd +++ b/episodes/05-differential-expression.Rmd @@ -120,7 +120,7 @@ The within-group variance of the counts for a gene following a negative binomial $var = \mu + \theta \mu^2$ -$\theta$ represents the gene-specific __dispersion__, a measure of variability or spread in the data. As a second step, we need to estimate gene-wise dispersions to get the expected within-group variance and test for group differences. Good dispersion estimates are challenging with a few sample per group only. Thus, information from genes with similar expression pattern are "borrowed". Gene-wise dispersion estimates are *shrinked* towards center values of the observed distribution of dispersions. With `DESeq2` we can get dispersion estimates using the `estimateDispersions()` function. +$\theta$ represents the gene-specific __dispersion__, a measure of variability or spread in the data. As a second step, we need to estimate gene-wise dispersions to get the expected within-group variance and test for group differences. Good dispersion estimates are challenging with a few samples per group only. Thus, information from genes with similar expression pattern are "borrowed". Gene-wise dispersion estimates are *shrinked* towards center values of the observed distribution of dispersions. With `DESeq2` we can get dispersion estimates using the `estimateDispersions()` function. We can visualize the effect of *shrinkage* using `plotDispEsts()`: ```{r estimate-dispersions} @@ -130,11 +130,11 @@ plotDispEsts(dds) ### Testing -We can use the `nbinomWaldTest()`function of `DESeq2` to fit a *generalized linear model (GLM)* and compute *log2 fold changes* (synonymous with "GLM coefficients", "beta coefficients" or "effect size") corresponding to the variables of the *design matrix*. The *design matrix* is directly related to the *design formular* and automatically derived from it. Assume a design formular with one variable (`~ treatment`) and two factor level (treatment and control). The mean expression $\mu_{j}$ of a specific gene in sample $j$ will be modeled as following: +We can use the `nbinomWaldTest()`function of `DESeq2` to fit a *generalized linear model (GLM)* and compute *log2 fold changes* (synonymous with "GLM coefficients", "beta coefficients" or "effect size") corresponding to the variables of the *design matrix*. The *design matrix* is directly related to the *design formula* and automatically derived from it. Assume a design formula with one variable (`~ treatment`) and two factor levels (treatment and control). The mean expression $\mu_{j}$ of a specific gene in sample $j$ will be modeled as following: $log(μ_j) = β_0 + x_j β_T$, - with $β_T$ corresponding to the log2 fold change of the treatment group, $x_j$ = 1, if $j$ belongs to the treatment group and $x_j$ = 0, if $j$ belongs to the control group. + with $β_T$ corresponding to the log2 fold change of the treatment groups, $x_j$ = 1, if $j$ belongs to the treatment group and $x_j$ = 0, if $j$ belongs to the control group. Finally, the estimated log2 fold changes are scaled by their standard error and tested for being significantly different from 0 using the *Wald test*. @@ -165,18 +165,18 @@ dds <- nbinomWaldTest(dds) ## Explore results for specific contrasts -The `results()` function can be used to extract gene-wise test statistics, such as log2 fold changes and (adjusted) p-values. The comparison of interest can be defined using contrasts, which are linear combinations of the model coefficients (equivalent to combinations of columns within the *design matrix*) and thus directly related to the design formular. A detailed explanation of design matrices and how to use them to specify different contrasts of interest can be found in the section on the [exploration of design matrices](../episodes/06-extra-design.Rmd). In the `results()` function a contrast can be represented by the variable of interest (reference variable) and the related level to compare using the `contrast` argument. By default the reference variable will be the __last variable__ of the design formular, the *reference level* will be the first factor level and the *last level* will be used for comparison. You can also explicitly specify a contrast by the `name` argument of the `results()` function. Names of all available contrasts can be accessed using `resultsNames()`. +The `results()` function can be used to extract gene-wise test statistics, such as log2 fold changes and (adjusted) p-values. The comparison of interest can be defined using contrasts, which are linear combinations of the model coefficients (equivalent to combinations of columns within the *design matrix*) and thus directly related to the design formula. A detailed explanation of design matrices and how to use them to specify different contrasts of interest can be found in the section on the [exploration of design matrices](../episodes/06-extra-design.Rmd). In the `results()` function a contrast can be represented by the variable of interest (reference variable) and the related level to compare using the `contrast` argument. By default the reference variable will be the __last variable__ of the design formula, the *reference level* will be the first factor level and the *last level* will be used for comparison. You can also explicitly specify a contrast by the `name` argument of the `results()` function. Names of all available contrasts can be accessed using `resultsNames()`. ::::::::::::::::::::::::::::::::::::: challenge What will be the default __contrast__, __reference level__ and __"last level"__ for comparisons when running `results(dds)` for the example used in this lesson? -*Hint: Check the design formular used to build the object.* +*Hint: Check the design formula used to build the object.* :::::::::::::::::::::::: solution -In the lesson example the last variable of the design formular is `time`. +In the lesson example the last variable of the design formula is `time`. The __reference level__ (first in alphabetical order) is `Day0` and the __last level__ is `Day8` ```{r check-time-levels} @@ -235,7 +235,7 @@ head(resSex[order(resSex$pvalue), ]) ### Multiple testing correction -Due to the high number of tests (one per gene) our DE results will contain a substantial number of __false positives__. For example, if we tested 20,000 genes at a threshold of $\alpha = 0.05$ we would expect 1000 significant DE genes with no differential expression. +Due to the high number of tests (one per gene) our DE results will contain a substantial number of __false positives__. For example, if we tested 20,000 genes at a threshold of $\alpha = 0.05$ we would expect 1,000 significant DE genes with no differential expression. To account for this expected high number of false positives, we can correct our results for __multiple testing__. By default `DESeq2` uses the [Benjamini-Hochberg procedure](https://link.springer.com/referenceworkentry/10.1007/978-1-4419-9863-7_1215) to calculate __adjusted p-values__ (padj) for DE results. diff --git a/episodes/07-gene-set-analysis.Rmd b/episodes/07-gene-set-analysis.Rmd index e587c280..3d6a3853 100644 --- a/episodes/07-gene-set-analysis.Rmd +++ b/episodes/07-gene-set-analysis.Rmd @@ -115,7 +115,7 @@ between genders. The following code performs **DESeq2** analysis which you should have already learnt in the previous episode. In the end, we have a list of DE genes filtered by FDR < 0.05, and save it in the object `sexDEgenes`. -The file `data/GSE96870_se.rds` contains a `RangedSummarizedExperiment` contains RNA-Seq counts that were downloaded in [Episode 2](../episodes/02-setup.Rmd) and constructed in [Episode 3](../episodes/03-import-annotate.Rmd) (minimal codes for downloading and constructing in the script +The file `data/GSE96870_se.rds` contains a `RangedSummarizedExperiment` that contains RNA-Seq counts that were downloaded in [Episode 2](../episodes/02-setup.Rmd) and constructed in [Episode 3](../episodes/03-import-annotate.Rmd) (minimal codes for downloading and constructing in the script [`download_data.R`](https://github.com/carpentries-incubator/bioc-rnaseq/blob/main/episodes/download_data.R). In the following code, there are also comments that explain every step of the analysis. @@ -183,7 +183,7 @@ consistent in the two. Later in this episode, we will learn how to perform gene ID conversion in the ORA analysis. -Since the DE genes and the gene set can be mathematically thought as two sets, +Since the DE genes and the gene set can be mathematically thought of as two sets, a natural way is to first visualize them with a Venn diagram. ```{r venn-diagram, fig.width = 5*2, fig.height = 5*2, dpi = 72*2} @@ -208,7 +208,7 @@ go to the next section. ### Fisher's exact test To statistically measure the enrichment, the relationship of DE genes and the -gene set is normally formatted into the following 2x2 contigency table, where +gene set is normally formatted into the following 2x2 contingency table, where in the table are the numbers of genes in different categories. $n_{+1}$ is the size of the _XY gene set_ (i.e. the number of member genes), $n_{1+}$ is the number of DE genes, $n$ is the number of total genes. @@ -248,7 +248,7 @@ matrix(c(n_11, n_12, n_10, n_21, n_22, n_20, n_01, n_02, n), nrow = 3, byrow = TRUE) ``` -And we fill these numbers into the 2x2 contigency table: +And we fill these numbers into the 2x2 contingency table:
@@ -284,13 +284,13 @@ t <- fisher.test(matrix(c(n_11, n_12, n_21, n_22), nrow = 2, byrow = TRUE), t$p.value ``` -Odd ratio from the Fisher's exact test is defined as follows: +Odds ratio from the Fisher's exact test is defined as follows: $$ -\mathrm{Odd\_ratio} = \frac{n_{11}/n_{21}}{n_{12}/n_{22}} = \frac{n_{11}/n_{12}}{n_{21}/n_{22}} = \frac{n_{11} * n_{22}}{n_{12} * n_{21}} +\mathrm{Odds\_ratio} = \frac{n_{11}/n_{21}}{n_{12}/n_{22}} = \frac{n_{11}/n_{12}}{n_{21}/n_{22}} = \frac{n_{11} * n_{22}}{n_{12} * n_{21}} $$ -If there is no association between DE genes and the gene set, odd ratio is +If there is no association between DE genes and the gene set, odds ratio is expected to be 1. And it is larger than 1 if there is an over-representation of DE genes on the gene set. @@ -299,7 +299,7 @@ of DE genes on the gene set. ### Further reading -The 2x2 contigency table can be transposed and it does not affect the Fisher's +The 2x2 contingency table can be transposed and it does not affect the Fisher's exact test. E.g. let's put whether genes are in the gene sets on rows, and put whether genes are DE on columns. @@ -403,8 +403,7 @@ written as: $$ X \sim \mathrm{Hyper}(n, n_{1+}, n_{+1})$$ The _p_-value of the enrichment is calculated as the probability of having an -observation equal to or larger than $n_{11}$ (or it can be understood as the -probability of being over-representated): +observation equal to or larger than $n_{11}$ under the assumption of independence: $$ \mathrm{Pr}( X \geqslant n_{11} ) = \sum_{x \in \{ {n_{11}, n_{11}+1, ..., \min\{n_{1+}, n_{+1}\} \}}} \mathrm{Pr}(X = x) @@ -622,8 +621,8 @@ Gene Ontology (GO) is the standard source for gene set enrichment analysis. GO contains three namespaces of biological process (BP), cellular components (CC) and molecular function (MF) which describe a biological entity from different aspect. The associations between GO terms and genes are integrated in the -Bioconductor standard packages: _the oragnism annotation packages_. In current -Bioconductor release 3.17, there are the following organism packages: +Bioconductor standard packages: _the organism annotation packages_. In the current +Bioconductor release (3.17), there are the following organism packages:
@@ -741,13 +740,13 @@ object can be directly used in the ORA analysis introduced in the next section. A biological pathway is a series of interactions among molecules in a cell that leads to a certain product or a change in a cell^[The definition is from Wikipedia: https://en.wikipedia.org/wiki/Biological_pathway.]. A pathway -involes a list of genes playing different roles which constructs the "pathway +involves a list of genes playing different roles which constructs the "pathway gene set". [KEGG pathway](https://www.genome.jp/kegg/pathway.html) is the mostly used database for pathways. It provides its data via a REST API (https://rest.kegg.jp/). There are several commands to retrieve specific types of data. To retrieve the pathway gene sets, we can use the "link" command as shown in the following URL ("link" means to link genes to pathways). When you -enter the URL in the web brower: +enter the URL in the web browser: ``` https://rest.kegg.jp/link/pathway/hsa @@ -865,7 +864,7 @@ head(MSigDBGeneSets) ``` The output is in the `tibble` class. If you have no experience with it, don't -worry, just take it as a table. As you can see, The three major gene IDs type +worry, just take it as a table. As you can see, the three major gene IDs type `"gene_symbol"`, `"entrez_gene"` and `"ensembl_gene"` are all included in the table. So users can easily pick one with the same gene ID type as in the DE gene list. For example: @@ -887,17 +886,17 @@ msigdbr(species = "mouse", category = "C2", subcategory = "CP:KEGG") The ORA method itself is quite simple and it has been implemented in a large number of R packages. Among them, the **clusterProfiler** package especially -does a good job that it has a seamless integration to the Bioconductor +does a good job in that it has a seamless integration to the Bioconductor annotation resources which allows extending GSEA analysis to other organisms easily; it has pre-defined functions for common analysis tasks, e.g. GO -enrichment, KEGG enrichment; and it implements a variaty of different +enrichment, KEGG enrichment; and it implements a variety of different visualization methods on the GSEA results. In this section, we will learn how -to perform ORA anlaysis with **clusterProfiler**. +to perform ORA analysis with **clusterProfiler**. Here we will use a list of DE genes from a different comparison. As you may still remember, there are only 54 DE genes between genders, which may not be a -good case for GSEA analysis, since after overlapping to a collection fo gene -sets, majority of the gene sets will have few or even no gene overlapped. +good case for GSEA analysis, since after overlapping to a collection of gene +sets, the majority of the gene sets will have few or even no gene overlapped. In this example we use the list of DE genes from the comparison between different time points. @@ -965,15 +964,15 @@ head(resTimeGOTable) ``` Now `enrichGO()` went through! The returned object `resTimeGO` is in a special -format which looks like a table but actually not! To get rid of the confusion, in +format which looks like a table but actually is not! To get rid of the confusion, in the code it is converted to a real data frame `resTimeGOTable`. In the output data frame, there are the following columns: - `ID`: ID of the gene set. In this example analysis, it is the GO ID. -- `Description`: Readable description. Here is the name of the GO term. -- `GeneRatio`: Number of DE genes in the gene set / total number of DE genes -- `BgRatio`: size of the gene set / total number of genes. +- `Description`: Readable description. Here it is the name of the GO term. +- `GeneRatio`: Number of DE genes in the gene set / total number of DE genes. +- `BgRatio`: Size of the gene set / total number of genes. - `pvalue`: _p_-value calculated from the hypergeometric distribution. - `p.adjust`: Adjusted _p_-value by the BH method. - `qvalue`: _q_-value which is another way for controlling false positives in multiple testings. @@ -989,7 +988,7 @@ of all genes in ORA, which we will touch in the end of this section. There are several additional arguments in `enrichGO()`: - `universe`: the universe set of genes, i.e. total genes to use. By default it - uses union of genes in all gene sets. If it is set, DE genes and all gene + uses the union of the genes in all gene sets. If it is set, DE genes and all gene sets will take intersections with it. We will discuss it in the end of this section. - `minGSSize`: Minimal size of gene sets. Normally gene sets with very small size have very specific biological meanings which are not helpful too much @@ -1049,7 +1048,7 @@ To perform KEGG pathway enrichment analysis, there is also a function automatically. Thus, if the ID type is not Entrez ID, we have to convert it by hand. -Note if you have also set `universe`, it should be convereted to Entrez IDs as +Note if you have also set `universe`, it should be converted to Entrez IDs as well. We use the `mapIds()` function to convert genes from symbols to Entrez IDs. @@ -1203,13 +1202,13 @@ genes or non-gene-set genes.
-In the contigency table, we are testing the dependency of whether genes being +In the contingency table, we are testing the dependency of whether genes being DE and whether genes being in the gene set. In the model, each gene has a definite attribute of being either DE or non-DE and each gene has a second definite attribute of either belonging to the gene set or not. If a larger universe is used, such as total genes where there are genes not measured nor will never annotated to gene sets (let's call them _non-informative genes_, -e.g. non-proteining coding genes or not-expressed genes), all the +e.g. non-protein coding genes or not-expressed genes), all the non-informative genes are implicitly assigned with an attribute of being non-DE or not in the gene set. This implicit assignment is not proper because these genes provide no information and they should not be included in the @@ -1306,11 +1305,11 @@ table. Both plots include the top 20 most significant terms. On dotplot, terms are ordered by the values on x-axis (the `GeneRatio`). Now we need to talk about "what is a good visualization?". The essential two -questions are "_what is the key message a plot transfer to readers?_" and +questions are "_what is the key message a plot transfers to readers?_" and "_what is the major graphical element in the plot?_". In the barplot or dotplot, the major graphical element which readers may notice the easiest is the height of bars or the offset of dots to the origin. The most important -message of the ORA anaysis is of course "the enrichment". The two examples from +message of the ORA analysis is of course "the enrichment". The two examples from `barplot()` and `dotplot()` actually fail to transfer such information to readers. In the first barplot where `"Count"` is used as values on x-axis, the numer of DE genes in gene sets is not a good measure of the enrichment because @@ -1321,7 +1320,7 @@ It is the same reason for dotplot where `"GeneRatio"` is used as values on x-axis. Gene ratio is calculated as the fraction of DE genes from a certain gene set (GeneRatio = Count/Total_DE_Genes). The dotplot puts multiple gene sets in the same plot and the aim is to compare between gene sets, thus gene -sets should be "scaled" to make them comparible. `"GeneRatio"` is not scaled +sets should be "scaled" to make them comparable. `"GeneRatio"` is not scaled for different gene sets and it still has a positive relation to the gene set size, which can be observed in the dotplot where higher the gene ratio, larger the dot size. Actually "GeneRatio" has the same effect as "Count" (GeneRatio = @@ -1343,7 +1342,7 @@ n = 28943 # length(resTimeGO@universe) ``` Instead of using `GeneRatio`, we use the fraction of DE genes in the gene sets -which are kind like a "scaled" value for all gene sets. Let's calculate it: +which are kind of like a "scaled" value for all gene sets. Let's calculate it: ```{r get-ratio} resTimeGOTable$DE_Ratio = n_11/n_01 diff --git a/renv/profiles/lesson-requirements/renv.lock b/renv/profiles/lesson-requirements/renv.lock index e932467f..0d8c493b 100644 --- a/renv/profiles/lesson-requirements/renv.lock +++ b/renv/profiles/lesson-requirements/renv.lock @@ -609,6 +609,22 @@ ], "Hash": "f0a46e23a2a7d6aa27e945faf7f242c7" }, + "SingleCellExperiment": { + "Package": "SingleCellExperiment", + "Version": "1.22.0", + "Source": "Bioconductor", + "Requirements": [ + "BiocGenerics", + "DelayedArray", + "GenomicRanges", + "S4Vectors", + "SummarizedExperiment", + "methods", + "stats", + "utils" + ], + "Hash": "47569baf7560bf8e3ba57386e9672f7f" + }, "SummarizedExperiment": { "Package": "SummarizedExperiment", "Version": "1.30.2", @@ -691,6 +707,18 @@ ], "Hash": "283c9a759c6592e2fdac1f7b83ab9442" }, + "anytime": { + "Package": "anytime", + "Version": "0.3.9", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "BH", + "R", + "Rcpp" + ], + "Hash": "74a64813f17b492da9c6afda6b128e3d" + }, "ape": { "Package": "ape", "Version": "5.7-1", @@ -1011,6 +1039,24 @@ ], "Hash": "f20c47fd52fae58b4e377c37bb8c335b" }, + "colourpicker": { + "Package": "colourpicker", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "ggplot2", + "htmltools", + "htmlwidgets", + "jsonlite", + "miniUI", + "shiny", + "shinyjs", + "utils" + ], + "Hash": "daec8f7d4ba89df06fe2c0802c3a9dac" + }, "commonmark": { "Package": "commonmark", "Version": "1.9.0", @@ -1731,6 +1777,40 @@ ], "Hash": "ac107251d9d9fd72f0ca8049988f1d7f" }, + "iSEE": { + "Package": "iSEE", + "Version": "2.12.0", + "Source": "Bioconductor", + "Requirements": [ + "BiocGenerics", + "ComplexHeatmap", + "DT", + "S4Vectors", + "SingleCellExperiment", + "SummarizedExperiment", + "circlize", + "colourpicker", + "ggplot2", + "ggrepel", + "grDevices", + "graphics", + "grid", + "igraph", + "methods", + "mgcv", + "rintrojs", + "shiny", + "shinyAce", + "shinyWidgets", + "shinydashboard", + "shinyjs", + "stats", + "utils", + "vipor", + "viridisLite" + ], + "Hash": "d7fca086ca345b01e2f313222e9d7f23" + }, "igraph": { "Package": "igraph", "Version": "1.5.1", @@ -1976,6 +2056,18 @@ ], "Hash": "18e9c28c1d3ca1560ce30658b22ce104" }, + "miniUI": { + "Package": "miniUI", + "Version": "0.1.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "htmltools", + "shiny", + "utils" + ], + "Hash": "fec5f52652d60615fdb3957b3d74324a" + }, "msigdbr": { "Package": "msigdbr", "Version": "7.5.1", @@ -2406,6 +2498,38 @@ ], "Hash": "438b99792adbe82a8329ad8697d45afe" }, + "shinyAce": { + "Package": "shinyAce", + "Version": "0.4.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "jsonlite", + "shiny", + "tools", + "utils" + ], + "Hash": "99b2ee37c4f174539b1b0d920b00d16c" + }, + "shinyWidgets": { + "Package": "shinyWidgets", + "Version": "0.8.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "anytime", + "bslib", + "grDevices", + "htmltools", + "jsonlite", + "rlang", + "sass", + "shiny" + ], + "Hash": "c6acc72327e63668bbc7bd258ee54132" + }, "shinydashboard": { "Package": "shinydashboard", "Version": "0.7.2", @@ -2672,6 +2796,18 @@ ], "Hash": "d0ef2856b83dc33ea6e255caf6229ee2" }, + "vipor": { + "Package": "vipor", + "Version": "0.4.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "graphics", + "stats" + ], + "Hash": "ea85683da7f2bfa63a98dc6416892591" + }, "viridis": { "Package": "viridis", "Version": "0.6.4",