A walktrough to guide the user in using the terapadog package, its functions, and understanding the outputs and results it produces.
Per Nonna Ezia, arrivederci e grazie di tutti i dolci (specialmente il rotolone).
Welcome to the official (and only) documentation about TERAPADOG (Translational Efficiency Regulation Analysis & Pathway Analysis with Down-weighting of Overlapping Genes).
To put is short, TERAPADOG is an implementation of the classic PADOG aglorithm (Pathway Analysis with Down-weighting of Overlapping Genes), but on top of the results of a Differential Translational Analysis (executed with DeltaTE). Now that the scientific jargon is out, let’s delve a bit more into the topic.
Works on human only!
In the last decade, experimental techniques such as Polysome profiling (Polysome-Seq) and Ribosome profiling (Ribo-Seq) have widely shown how gene expression is not regulated only at the transcriptional level (through the increase/decrease of the pool of mRNA species in the cell), but also at the translational level (through the active increase/decrease of the efficiency these mRNAs are translated to protein).
As a result of this, many packages have been developed to study gene regulation from this additional perspective, trying to characterize the changes in the Translational Efficiency (TE) each mRNA could undergo between conditions, an analysis which can be commonly referred to as Differential Translation Analysis (DTA).
The results of a DTA are usually a list of genes, each categorized into a different Regulatory Mode depending on the changes in mRNA levels and TE between the two conditions. Such an output, although informative per se, is also be quite complex to interpret when it comes to link together the different genes to infer the overarching metabolic shifts happening in the experiment.
As stated above, a list of hundreds (if not thousands) of genes can be difficult to interpret from a systemic perspective. A possible strategy to ease this step is to map this information on biological pathways, so to obtain an overarching perspective showing how the different genes undergoing TE regulation are linked together.
It is from this idea that terapadog was conceived: to be able to perform a gene set analysis (applying the same logic as used in the PADOG package, see references for additional info) on the sets highlighted as being actively under Translational Efficiency changes.
While terapadog can be run as a standalone tool (as shown in this vignette), it was originally designed to serve as an additional analysis method available within the Reactome Pathway Analysis framework Reactome GSA.
As a standalone tool, terapadog enables users to investigate genes undergoing changes in translational efficiency (TE) and the pathways they are involved in. However, it does not provide the high-level exploration and visualization features offered by Reactome.
We kindly encourage you to try terapadog within the Reactome platform (see the link above) to fully benefit from its user-friendly interface and powerful visualisation tools.
For more information regarding PADOG or DeltaTE and Regulatory Modes, please refer to the paper mentioned in the references section of this vignette.
About Differential Translation Analysis:
Chothani S, Adami E, Ouyang JF, Viswanathan S, Hubner N, Cook SA, Schafer S, Rackham OJL. deltaTE: Detection of Translationally Regulated Genes by Integrative Analysis of Ribo-seq and RNA-seq Data. Curr Protoc Mol Biol. (2019).
[https://pubmed.ncbi.nlm.nih.gov/31763789/]
About PADOG:
Tarca AL, Draghici S, Bhatti G. et al. Down-weighting overlapping genes improves gene set analysis. BMC Bioinformatics (2012).
[https://doi.org/10.1186/1471-2105-13-136]
About the ReactomeGSA:
Griss J, Viteri G, Sidiropoulos K, Nguyen V, Fabregat A, Hermjakob H, ReactomeGSA - Efficient Multi-Omics Comparative Pathway Analysis, Molecular & Cellular Proteomics (2020).
To install the terapadog package, execute the following code:
if (!require("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("terapadog")
Also remember to load the library before calling its functions.
# Load the library
library(terapadog)
This section will guide you thorough the various steps of the analysis, using some testing data. The data used at this stage is the same used by Chotani S. et al. in their paper on DeltaTE and has been retrieved from their github repository. Any manipulation on the data has been detailed in the extdata_info.md file (see scripts folder of the package).
[https://github.com/SGDDNB/translational_regulation.git]
This analysis walk-trough will give two outputs:
the terapadog() function will analyse the pathway enrichment for genes that result to be undergoing translational regulation. This is the main output of the function, which allows to understand if a particular pathway is actively undergoing translational regulation.
the get_FCs() function (and plotDTA()) will give a breakdown on how each single gene is being regulated (as per a classic DTA analysis). This is a more atomic perspective on the data, optional to end of a GSEA, but which has been included to further contextualize the results obtained.
Intuitively, no output is better than the other. These are just two different ways to inspect the data and draw insights. Some users might find more intuitive to just have a high-level overview of the pathways undergoing translational regulation (terapadog() output), others might want to inspect the results from a single-gene perspective (get_FCs()). Some might find tables intimidating and might want to result to graphical representations (plotting the results of the latter with plotDTA().
One of the aims of this package is to empower users to analyse the data, but it is also fundamental to remember that it has been conceived as an integration to the ReactomeGSA backend, so to leverage on their advanced visualisations (not to be an alternative to it!)
First thing first, terapadog requires raw gene counts as input data. This means your input file should look like a table where row names are gene IDs and column names identify different samples (more info on that below). The counts should be raw inegers, no normalisation of preparatory step required (those steps are handled by the functions within the package).
Secodnly, you need to make sure your input data is in the right format.
In order to execute the analysis, it is mandatory input files are correctly formatted, so follow the guidelines detailed below.
In a DTA, you will have RNA-Seq counts and Ribo-Seq counts coming from the same sample. That is to say, for “Sample A” you will have a set of gene counts obtained from RNA-Seq and a set obtained from the Ribo-Seq protocol.
It is mandatory for the sample name to be the same in both RNA-Seq and RIBO-Seq count files.
Example of RNA-Seq file:
GeneId | Sample_A | Sample_B | Sample_C | Sample_D |
---|---|---|---|---|
ENSG0001 | 657 | 598 | 645 | 603 |
ENSG0002 | 342 | 389 | 350 | 329 |
## s2424 s2724 s3424 s4124 s24 s27 s34 s41
## LOC102725121 0 0 0 0 0 0 0 0
## LOC105378947 0 1 0 0 0 0 0 0
## LOC107984841 0 1 0 3 0 1 1 0
## LOC107985728 5 2 2 0 0 0 0 0
## LOC107985729 0 0 1 0 0 0 0 0
## LOC105378949 6 7 4 4 7 14 7 13
Example of Ribo-Seq file:
GeneId | Sample_A | Sample_B | Sample_C | Sample_D |
---|---|---|---|---|
ENSG0001 | 100 | 102 | 120 | 115 |
ENSG0002 | 700 | 658 | 712 | 707 |
## s2424 s2724 s3424 s4124 s24 s27 s34 s41
## LOC102725121 0 0 0 0 0 0 0 0
## LOC105378947 0 0 0 0 0 0 0 0
## LOC107984841 0 0 0 0 0 0 0 0
## LOC107985728 0 0 0 1 0 1 0 0
## LOC107985729 0 0 0 0 0 0 0 0
## LOC105378949 2 2 0 0 0 2 0 0
Yes, they look almost identical in the formatting, with only the count values as a striking difference. It is intended, don’t worry.
It is mandatory the columns of this file are named with these specific names and capitalization.
Example of Sample info file:
SampleName | Condition |
---|---|
Sample_A | ctrl |
Sample_B | disease |
Sample_C | ctrl |
Sample_D | disease |
## SampleName Condition
## 1 s2424 2
## 2 s2724 2
## 3 s3424 2
## 4 s4124 2
## 5 s24 1
## 6 s27 1
## 7 s34 1
## 8 s41 1
If the SampleName was different between RNA-Seq counts and Ribo-Seq counts, you would have to compile 16 rows instead of just 8 in the sample info file. This is one of the (user-wise) reasons why the names must match.
About paired experimental designs:
Terapadog also supports paired experimental designs, when it’s important to link samples together in the analysis (for instance, when observing the response to treatment in different patients. Each patient will have a pair of observations). To do so, you need to include the pairing information in your metadata, within the “Block” column.
See example below:
Example of Sample info file with Block column:
SampleName | Condition | Block |
---|---|---|
Sample_A | before_treatment | Patient_1 |
Sample_B | after_treatment | Patient_1 |
Sample_C | before_treatment | Patient_2 |
Sample_D | after_treatment | Patient_2 |
Now that your input files are ready to go, we can start the terapadog workflow. First thing first, you will have to call the function preparedTerapadogData to load the files in your R environment and start the preprocessing operations.
preparedTerapadogData requires the following argument as string inputs:
The path to the RNA-Seq counts file.
The path to the Ribo-Seq counts file.
The path to the sample info file.
The name of the condition you want to use as baseline in the comparison.
For instance, if you have “control” and “disease” as conditions, “control” is the baseline.
The name of the condition you want to use as target in the comparison.
For instance, if you have “control” and “disease” as conditions, “disease” is the target.
For tutorial purposes, this package comes with the three files you will need to carry out a full terapadog analsysis.
# Read the paths in your R environments
path_rna_counts <- system.file("extdata", "rna_counts.tsv",
package = "terapadog")
path_ribo_counts <- system.file("extdata", "ribo_counts.tsv",
package = "terapadog")
sample_info_path <- system.file("extdata", "sample_info.tsv",
package = "terapadog")
# Call prepareTerapadogData
prep_data <- terapadog::prepareTerapadogData(path_rna_counts, path_ribo_counts,
sample_info_path,"1", "2")
The result of this function will be a list with two elements:
A matrix containing the counts from the RNA-Seq and Ribo-Seq files, formatted.
A dataframe with all the info relative to the experimental design, which have been derived from sample_info, the two count files and the specified comparison.
# Extract the matrix
expression.data <- prep_data$expression.data
print(head(expression.data))
## s2424_RNA s2724_RNA s3424_RNA s4124_RNA s24_RNA s27_RNA s34_RNA
## LOC102725121 0 0 0 0 0 0 0
## LOC105378947 0 1 0 0 0 0 0
## LOC107984841 0 1 0 3 0 1 1
## LOC107985728 5 2 2 0 0 0 0
## LOC107985729 0 0 1 0 0 0 0
## LOC105378949 6 7 4 4 7 14 7
## s41_RNA s2424_RIBO s2724_RIBO s3424_RIBO s4124_RIBO s24_RIBO
## LOC102725121 0 0 0 0 0 0
## LOC105378947 0 0 0 0 0 0
## LOC107984841 0 0 0 0 0 0
## LOC107985728 0 0 0 0 1 0
## LOC107985729 0 0 0 0 0 0
## LOC105378949 13 2 2 0 0 0
## s27_RIBO s34_RIBO s41_RIBO
## LOC102725121 0 0 0
## LOC105378947 0 0 0
## LOC107984841 0 0 0
## LOC107985728 1 0 0
## LOC107985729 0 0 0
## LOC105378949 2 0 0
# Extract the experimental design dataframe
exp_de <- prep_data$exp_de
print(exp_de)
## SampleID SampleName SeqType Condition Group
## 1 s2424_RNA s2424 RNA 2 d
## 2 s2724_RNA s2724 RNA 2 d
## 3 s3424_RNA s3424 RNA 2 d
## 4 s4124_RNA s4124 RNA 2 d
## 5 s24_RNA s24 RNA 1 c
## 6 s27_RNA s27 RNA 1 c
## 7 s34_RNA s34 RNA 1 c
## 8 s41_RNA s41 RNA 1 c
## 9 s2424_RIBO s2424 RIBO 2 d
## 10 s2724_RIBO s2724 RIBO 2 d
## 11 s3424_RIBO s3424 RIBO 2 d
## 12 s4124_RIBO s4124 RIBO 2 d
## 13 s24_RIBO s24 RIBO 1 c
## 14 s27_RIBO s27 RIBO 1 c
## 15 s34_RIBO s34 RIBO 1 c
## 16 s41_RIBO s41 RIBO 1 c
The function terapadog() requires the input ID to be given in the form of “entrezgene_id”. This function allows for the conversion from “ensembl_gene_id” or “hgnc_symbol”.
When converting from one system to another, a common issue is having multiple mappings: that is to say, several IDs in the original format map to the same entrezgene_id.
In the context of this function, multiple mappings are aggregated (by sum) and a small report .txt file is created by the user-specified path, allowing the user to see which duplicate IDs were aggregated once this step is done. If no path is provided, the report will be generated in a temporary directory ( use tempdir() to see which one.
id_converter() requires the following argument as inputs:
A matrix with the gene count values and whose rownames are the gene Ids.
A string representing the type of ID given as input. Either “hgnc_symbol” or “ensembl_gene_id”.
A boolean, to specify whether to save the report on duplicates or not. FALSE by default.
The output path for the report (not mandatory)
# Example of function calling
expression.data <- id_converter(expression.data, "ensembl_gene_id")
The result of this function will be:
A matrix with the rownames now converted to “entrezgene_id”.
A “conversion_report.txt” file, which details which duplicate IDs were aggregated.
This is the main function that names the full package. It perform the Gene Set Anaylsis on the genes that exhibit a significant change in Translation Efficiency (TE) between two conditions. It has several inputs, of which only two (esetm and exp_de) are strictly required to perform the analysis.
esetm: A matrix containing the RNA-Seq Counts and Ribo-Seq counts, with the gene IDs as entrezgene_ids (argument esetm). Please refer to the sections above (prepareTerapadogData() and id_converter()) for further info.
exp_de: A dataframe containing the information regarding the samples and the experimental design. Please refer to the sections above (prepareTerapadogData()) for further info.
paired: A logical value. Allows for experimental designs where samples are paired (for instance, a study on the response of patients to a drug). This argument is optional. Remember, if you set this to TRUE, you must have tha pairing info specified as the “Block” column of your metadata (see section 3.1 of the vignette)
gslist: A list of named character vectors. Each vector is named after a KEGG pathway ID and each element within the vector is an ENSEMBL gene ID for a gene part of said pathway. This argument is optional.
organism: A string of three letters, giving the name of the organism in exam as supported by the “KEGGREST” package. Default is “hsa”. This argument is optional.
gs.names: A character vector with the names of the gene sets. Must have the same length as gslist. This argument is optional.
NI: Number of iterations allowed to determine the gene set score significance and p-value. Default is 1000. This argument is optional.
Nmin: The minimum size of gene sets to be included in the analysis. Default is 3. This argument is optional.
verbose: A logical value. Displays the number of iterations done. Default is TRUE. This argument is optional.
A footnote for the scared user: The function requires many optional parameters because of its integration within the ReactomeGSA, where flexibility on said options are required. In the context of an independent user, only the first two (or three if the samples are paired) should be enough to run the analysis!
Since running terapadog() can be computationally intensive and time-consuming, this vignette will provide a non-evaluate example of calling the function (though the correctness of the full function is tested within the test-terapadog.R unit tests) An example of the results (“terapadog_res_example.csv”) is still available within the package and is partially loaded below for inspection.
# Calling terapadog.
results <- terapadog(esetm = expression.data, exp_de = exp_de)
The final result of the analysis is a data frame, with the following columns:
# Load the example of terapadog results from the library
example <- system.file("extdata", "terapadog_res_example.csv",
package = "terapadog")
res_example <- read.table(example)
print(head(res_example))
## V1
## 1 Name
## 2 Metabolic pathways - Homo sapiens (human)
## 3 Pathways of neurodegeneration - multiple diseases - Homo sapiens (human)
## 4 Biosynthesis of cofactors - Homo sapiens (human)
## 5 Protein processing in endoplasmic reticulum - Homo sapiens (human)
## 6 Lysosome - Homo sapiens (human)
## V2
## 1 ,"ID","Size","meanAbsT0","padog0","PmeanAbsT","Ppadog"
## 2 ,"01100",1553,3.63109388257983,26.2803510365367,0.564516129032258,0.000144927536231884
## 3 ,"05022",476,-0.144014002974607,9.07315296880447,0.403225806451613,0.000144927536231884
## 4 ,"01240",152,0.444687188187879,7.90686985261375,0.532258064516129,0.000144927536231884
## 5 ,"04141",169,-1.39219614659238,7.57924904772301,0.032258064516129,0.000144927536231884
## 6 ,"04142",133,-1.78132458856429,6.68070559237963,0.032258064516129,0.000144927536231884
These results are the same of the PADOG algorithm, though it is important to remind that terapadog uses the padj instead of the T0 in its internal calculations (due to the design of the implementation with DeltaTE), so some ranges (for those values that were calculated fro the T0) might seem different to the experienced user. For all intent and purposes, just keep in mind that the algorithm follows the same logic and, as such, the output reflects that same ideas.
If you want to check if a pathway is significantly enriched, look at the padog0 score (higher = enriched) and at the Ppadog for the significance.
This functions perform a classic Differential Translation Analysis (DTA). It allows the user to see how each gene is regulated in terms of TE and RNA fold changes, while also categorizing each gene into a different Regulatory Mode. It requires the following parameters:
expression.data: A matrix containing the RNA-Seq Counts and Ribo-Seq counts. You can either give the matrix as it is in output from prepareTerapadogData() or convert the gene IDs displayed using id_converter(). Please refer to the sections above (prepareTerapadogData() and id_converter()) for further info.
exp_de: A dataframe containing the information regarding the samples and the experimental design. Please refer to the sections above (prepareTerapadogData()) for further info.
paired: A logical value. Allows for experimental designs where samples are paired (for instance, a study on the response of patients to a drug). This argument is optional. Remember, if you set this to TRUE, you must have tha pairing info specified as the “Block” column of your metadata (see section 3.1 of the vignette)
# Loads apeglm
# Check and load apeglm
if (!requireNamespace("apeglm", quietly = TRUE)) {
stop("The package 'apeglm' is required to run this vignette. Please install it using BiocManager::install('apeglm').")
}
# Execute the analysis
fc_results <- get_FCs(expression.data, exp_de)
## estimating size factors
## estimating dispersions
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## fitting model and testing
## using 'apeglm' for LFC shrinkage. If used in published research, please cite:
## Zhu, A., Ibrahim, J.G., Love, M.I. (2018) Heavy-tailed prior distributions for
## sequence count data: removing the noise and preserving large differences.
## Bioinformatics. https://doi.org/10.1093/bioinformatics/bty895
## estimating size factors
## estimating dispersions
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## fitting model and testing
## using 'apeglm' for LFC shrinkage. If used in published research, please cite:
## Zhu, A., Ibrahim, J.G., Love, M.I. (2018) Heavy-tailed prior distributions for
## sequence count data: removing the noise and preserving large differences.
## Bioinformatics. https://doi.org/10.1093/bioinformatics/bty895
# Print the results
print(head(fc_results))
## Identifier TE_FC TE_padj Identifier.1 RIBO_FC RIBO_padj
## 1 LOC102725121 NA NA LOC102725121 NA NA
## 2 LOC105378947 -1.281263 NA LOC105378947 NA NA
## 3 LOC107984841 -1.591696 NA LOC107984841 NA NA
## 4 LOC107985728 -4.207352 NA LOC107985728 0.0001822491 NA
## 5 LOC107985729 -1.281263 NA LOC107985729 NA NA
## 6 LOC105378949 1.532022 NA LOC105378949 0.0055613321 NA
## RNA_FC RNA_padj RegMode
## 1 NA NA Undeterminable
## 2 0.006186348 NA Undeterminable
## 3 0.008455336 NA Undeterminable
## 4 0.024308190 NA Undeterminable
## 5 0.006381561 NA Undeterminable
## 6 -0.086836948 0.4830256 Undeterminable
## RegModeExplicit
## 1 One or more adjusted p-values are missing (NA)
## 2 One or more adjusted p-values are missing (NA)
## 3 One or more adjusted p-values are missing (NA)
## 4 One or more adjusted p-values are missing (NA)
## 5 One or more adjusted p-values are missing (NA)
## 6 One or more adjusted p-values are missing (NA)
The result of this function is a data frame with the following columns:
The various RegModes are reported as defined in Chotani et al. paper cited thoughout this vignette, exception for Undeterminable (genes who have NA in one or more samples), and Undetermined (genes who cannot be assigned to any RegMode, as defined in Chotani et al. paper).
This function plots the results of the get_FCs() function to an interactive html plot. It has been made with the idea of being a helper in the visualisation of the results. It skips the genes under “Undeterminable” and “Undetermined” RegModes, since they would clutter the plot without adding any value to it. It requires the following parameters:
If no path is provided, the report will be generated in a temporary directory ( use tempdir() to see which one.
# Execute the function
plot_FCs <- plotDTA(fc_results)
Discalimer: Terapadog has been developed using the PADOG algorithm of analysis as a blueprint. I do not own the original code.
My ownership is limited to the idea of the implementation and any new code written in that regard, not to the tools used within, for which authorship is documented below:
Tarca AL, Draghici S, Bhatti G. et al. Down-weighting overlapping genes improves gene set analysis. BMC Bioinformatics (2012).
[https://doi.org/10.1186/1471-2105-13-136]
Similarly, the test data that has been used within this package has been retrieved from the github repository relative to the original DeltaTE paper (see below). I do not claim ownership of the data, and I encourage you to check the extdata_info.md file to see the modifications applied to it for the tutorial purposes.
DeltaTE:
Chothani S, Adami E, Ouyang JF, Viswanathan S, Hubner N, Cook SA, Schafer S, Rackham OJL. deltaTE: Detection of Translationally Regulated Genes by Integrative Analysis of Ribo-seq and RNA-seq Data. Curr Protoc Mol Biol. (2019).
[https://pubmed.ncbi.nlm.nih.gov/31763789/]
In addition, DeltaTE makes use of the lfcShrink function from the apeglm package:
Zhu A, Ibrahim JG, Love MI. Heavy-tailed prior distributions for sequence count data: removing the noise and preserving large differences.vBioinformatics. (2018)
[https://doi.org/10.1093/bioinformatics/bty895]
Finally, I reference the ReactomeGSA, since this tool has been developed with the final aim to have it integrated with it once published, as peart of a new analyser.
Griss J, Viteri G, Sidiropoulos K, Nguyen V, Fabregat A, Hermjakob H, ReactomeGSA - Efficient Multi-Omics Comparative Pathway Analysis, Molecular & Cellular Proteomics (2020).
My PhD is supported by Science Foundation Ireland, Centre for Research Training in Genomics Data Science [18/CRT/6214].
This package has been devolped as part of a collaboration between my hosting istitution (University College Cork, Cork, Ireland) and the European Bioinformatics Institute (EMBL-EBI, Hinxton, UK).
A special thanks goes to Henning Hermanjacob and Alexander Gretner for the support, and to all the Reactome/EBI team for the patience.
Finally, to you, who have read all the vignette up to here. Hopefully, I have been clear and explanatory enough in the use of the package.
## R Under development (unstable) (2025-02-19 r87757)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.2 LTS
##
## Matrix products: default
## BLAS: /home/biocbuild/bbs-3.21-bioc/R/lib/libRblas.so
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.0 LAPACK version 3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_GB LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## time zone: America/New_York
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] terapadog_0.99.6 BiocStyle_2.35.0
##
## loaded via a namespace (and not attached):
## [1] DBI_1.2.3 httr2_1.1.1
## [3] biomaRt_2.63.1 rlang_1.1.5
## [5] magrittr_2.0.3 matrixStats_1.5.0
## [7] compiler_4.5.0 RSQLite_2.3.9
## [9] png_0.1-8 vctrs_0.6.5
## [11] stringr_1.5.1 pkgconfig_2.0.3
## [13] crayon_1.5.3 fastmap_1.2.0
## [15] dbplyr_2.5.0 XVector_0.47.2
## [17] rmarkdown_2.29 UCSC.utils_1.3.1
## [19] purrr_1.0.4 bit_4.6.0
## [21] xfun_0.51 cachem_1.1.0
## [23] GenomeInfoDb_1.43.4 jsonlite_1.9.1
## [25] progress_1.2.3 blob_1.2.4
## [27] DelayedArray_0.33.6 BiocParallel_1.41.2
## [29] parallel_4.5.0 prettyunits_1.2.0
## [31] R6_2.6.1 bslib_0.9.0
## [33] stringi_1.8.4 GenomicRanges_1.59.1
## [35] jquerylib_0.1.4 numDeriv_2016.8-1.1
## [37] Rcpp_1.0.14 bookdown_0.42
## [39] SummarizedExperiment_1.37.0 knitr_1.49
## [41] IRanges_2.41.3 Matrix_1.7-2
## [43] tidyselect_1.2.1 abind_1.4-8
## [45] yaml_2.3.10 codetools_0.2-20
## [47] curl_6.2.1 lattice_0.22-6
## [49] tibble_3.2.1 plyr_1.8.9
## [51] withr_3.0.2 Biobase_2.67.0
## [53] KEGGREST_1.47.0 coda_0.19-4.1
## [55] evaluate_1.0.3 BiocFileCache_2.15.1
## [57] xml2_1.3.7 Biostrings_2.75.4
## [59] pillar_1.10.1 BiocManager_1.30.25
## [61] filelock_1.0.3 MatrixGenerics_1.19.1
## [63] stats4_4.5.0 plotly_4.10.4
## [65] generics_0.1.3 emdbook_1.3.13
## [67] S4Vectors_0.45.4 hms_1.1.3
## [69] ggplot2_3.5.1 munsell_0.5.1
## [71] scales_1.3.0 glue_1.8.0
## [73] lazyeval_0.2.2 tools_4.5.0
## [75] apeglm_1.29.0 data.table_1.17.0
## [77] locfit_1.5-9.12 mvtnorm_1.3-3
## [79] grid_4.5.0 tidyr_1.3.1
## [81] bbmle_1.0.25.1 crosstalk_1.2.1
## [83] bdsmatrix_1.3-7 AnnotationDbi_1.69.0
## [85] colorspace_2.1-1 GenomeInfoDbData_1.2.13
## [87] cli_3.6.4 rappdirs_0.3.3
## [89] S4Arrays_1.7.3 viridisLite_0.4.2
## [91] dplyr_1.1.4 gtable_0.3.6
## [93] DESeq2_1.47.5 sass_0.4.9
## [95] digest_0.6.37 BiocGenerics_0.53.6
## [97] SparseArray_1.7.6 htmlwidgets_1.6.4
## [99] memoise_2.0.1 htmltools_0.5.8.1
## [101] lifecycle_1.0.4 httr_1.4.7
## [103] bit64_4.6.0-1 MASS_7.3-65