Supported differential expression methods
Kevin Rue-Albrecht
University of Oxfordkevin.rue-albrecht@imm.ox.ac.uk
31 October 2024
Source:vignettes/methods.Rmd
methods.Rmd
Implementation
User-facing storage and access
Differential expression results are generally reported as tables of statistics, including (log2) fold-change, p-value, average expression, etc.
Those statistics being reported for individual features (e.g.,
genes), the rowData()
component of
SummarizedExperiment()
objects provides a natural home for
that information. Specifically, iSEEde
stores and retrieves differential expression results in
rowData(se)[["iSEEde"]]
. However, the
rowData()
function should not be used to access or edit
that information. Instead, the functions
embedContrastResults()
and contrastResults()
,
should be used to store and retrieve contrast results, respectively, as
those functions ensure that feature names are kept synchronised with the
enclosing SummarizedExperiment
object.
Moreover, the function contrastResultsNames()
can be
used to retrieve the names of contrast available in a given
SummarizedExperiment
object.
Additional considerations
The first challenge arises when differential expression statistics
are computed only for a subset of features. In that case,
embedContrastResults()
populates missing information with
NA
values.
The second challenge arises from the different names of columns used by individual differential expression methods to store differential expression common statistics. To address this, iSEEde provides S4 classes creating a common interface to supported differential expression methods. Each class of differential expression results implements the following methods:
-
pValue()
returns the vector of raw p-values. -
log2FoldChange()
returns the vector of log2-fold-change values. -
averageLog2()
returns the vector of average log2-expression values.
Example data
In this example, we use the ?airway
data set.
We briefly adjust the reference level of the treatment factor to the untreated condition.
Supported methods
Limma
We first use edgeR::filterByExpr()
to remove genes whose
counts are too low to support a rigorous differential expression
analysis. Then we run a standard Limma-Voom analysis using
edgeR::voomLmFit()
, limma::makeContrasts()
,
and limma::eBayes()
. (Alternatively, we could have used
limma::treat()
instead of
limma::eBayes()
.)
The linear model includes the dex
and cell
covariates, indicating the treatment conditions and cell types,
respectively. Here, we are interested in differences between treatments,
adjusted by cell type, and define this comparison as the
dextrt - dexuntrt
contrast.
The final differential expression results are fetched using
limma::topTable()
.
library("edgeR")
design <- model.matrix(~ 0 + dex + cell, data = colData(airway))
keep <- filterByExpr(airway, design)
fit <- voomLmFit(airway[keep, ], design, plot = FALSE)
contr <- makeContrasts("dextrt - dexuntrt", levels = design)
fit <- contrasts.fit(fit, contr)
fit <- eBayes(fit)
res_limma <- topTable(fit, sort.by = "P", n = Inf)
head(res_limma)
#> gene_id gene_name entrezid gene_biotype gene_seq_start gene_seq_end
#> ENSG00000165995 ENSG00000165995 CACNB2 NA protein_coding 18429606 18830798
#> ENSG00000120129 ENSG00000120129 DUSP1 NA protein_coding 172195093 172198198
#> ENSG00000146250 ENSG00000146250 PRSS35 NA protein_coding 84222194 84235423
#> ENSG00000189221 ENSG00000189221 MAOA NA protein_coding 43515467 43606068
#> ENSG00000157214 ENSG00000157214 STEAP2 NA protein_coding 89796904 89867451
#> ENSG00000152583 ENSG00000152583 SPARCL1 NA protein_coding 88394487 88452213
#> seq_name seq_strand seq_coord_system symbol logFC AveExpr t
#> ENSG00000165995 10 1 NA CACNB2 3.205606 3.682244 37.68303
#> ENSG00000120129 5 -1 NA DUSP1 2.864778 6.644455 28.50569
#> ENSG00000146250 6 1 NA PRSS35 -2.828184 3.224885 -28.10830
#> ENSG00000189221 X 1 NA MAOA 3.256085 5.950559 27.66135
#> ENSG00000157214 7 1 NA STEAP2 1.894559 6.790009 27.40834
#> ENSG00000152583 4 -1 NA SPARCL1 4.489009 4.166904 27.34820
#> P.Value adj.P.Val B
#> ENSG00000165995 1.115938e-10 1.881472e-06 14.45518
#> ENSG00000120129 1.148539e-09 4.309046e-06 13.01074
#> ENSG00000146250 1.291089e-09 4.309046e-06 12.44376
#> ENSG00000189221 1.475547e-09 4.309046e-06 12.75540
#> ENSG00000157214 1.592916e-09 4.309046e-06 12.71210
#> ENSG00000152583 1.622327e-09 4.309046e-06 12.33402
Then, we embed this set of differential expression results in the
airway
object using the embedContrastResults()
method.
Because the output of limma::topTable()
is a standard
data.frame
, the class=
argument must be used
to manually identify the method that produced those results.
Supported classes are listed in the object
iSEEde::embedContrastResultsMethods
, i.e.
This manual method is preferable to any automated heuristic
(e.g. using the column names of the data.frame
for
identifying it as a limma::topTable()
output).
The results embedded in the airway
object can be
accessed using the contrastResults()
function.
airway <- embedContrastResults(res_limma, airway, name = "Limma-Voom", class = "limma")
contrastResults(airway)
#> DataFrame with 63677 rows and 1 column
#> Limma-Voom
#> <iSEELimmaResults>
#> ENSG00000000003 <iSEELimmaResults>
#> ENSG00000000005 <iSEELimmaResults>
#> ENSG00000000419 <iSEELimmaResults>
#> ENSG00000000457 <iSEELimmaResults>
#> ENSG00000000460 <iSEELimmaResults>
#> ... ...
#> ENSG00000273489 <iSEELimmaResults>
#> ENSG00000273490 <iSEELimmaResults>
#> ENSG00000273491 <iSEELimmaResults>
#> ENSG00000273492 <iSEELimmaResults>
#> ENSG00000273493 <iSEELimmaResults>
contrastResults(airway, "Limma-Voom")
#> iSEELimmaResults with 63677 rows and 16 columns
#> gene_id gene_name entrezid gene_biotype gene_seq_start gene_seq_end
#> <character> <character> <integer> <character> <integer> <integer>
#> ENSG00000000003 ENSG00000000003 TSPAN6 NA protein_coding 99883667 99894988
#> ENSG00000000005 NA NA NA NA NA NA
#> ENSG00000000419 ENSG00000000419 DPM1 NA protein_coding 49551404 49575092
#> ENSG00000000457 ENSG00000000457 SCYL3 NA protein_coding 169818772 169863408
#> ENSG00000000460 ENSG00000000460 C1orf112 NA protein_coding 169631245 169823221
#> ... ... ... ... ... ... ...
#> ENSG00000273489 NA NA NA NA NA NA
#> ENSG00000273490 NA NA NA NA NA NA
#> ENSG00000273491 NA NA NA NA NA NA
#> ENSG00000273492 NA NA NA NA NA NA
#> ENSG00000273493 NA NA NA NA NA NA
#> seq_name seq_strand seq_coord_system symbol logFC AveExpr t
#> <character> <integer> <integer> <character> <numeric> <numeric> <numeric>
#> ENSG00000000003 X -1 NA TSPAN6 -0.464216 5.02559 -6.589673
#> ENSG00000000005 NA NA NA NA NA NA NA
#> ENSG00000000419 20 -1 NA DPM1 0.125077 4.60191 1.632802
#> ENSG00000000457 1 -1 NA SCYL3 -0.042107 3.47269 -0.438929
#> ENSG00000000460 1 1 NA C1orf112 -0.228517 1.40857 -0.977961
#> ... ... ... ... ... ... ... ...
#> ENSG00000273489 NA NA NA NA NA NA NA
#> ENSG00000273490 NA NA NA NA NA NA NA
#> ENSG00000273491 NA NA NA NA NA NA NA
#> ENSG00000273492 NA NA NA NA NA NA NA
#> ENSG00000273493 NA NA NA NA NA NA NA
#> P.Value adj.P.Val B
#> <numeric> <numeric> <numeric>
#> ENSG00000000003 0.000136603 0.00171857 0.899306
#> ENSG00000000005 NA NA NA
#> ENSG00000000419 0.139297605 0.25279527 -6.274792
#> ENSG00000000457 0.671768770 0.77787936 -7.230811
#> ENSG00000000460 0.355374953 0.49644090 -6.208897
#> ... ... ... ...
#> ENSG00000273489 NA NA NA
#> ENSG00000273490 NA NA NA
#> ENSG00000273491 NA NA NA
#> ENSG00000273492 NA NA NA
#> ENSG00000273493 NA NA NA
DESeq2
First, we use DESeqDataSet()
to construct a
DESeqDataSet
object for the analysis. Then we run a
standard DESeq2
analysis using DESeq()
.
The differential expression results are fetched using
results()
.
library("DESeq2")
dds <- DESeqDataSet(airway, ~ 0 + dex + cell)
dds <- DESeq(dds)
res_deseq2 <- results(dds, contrast = list("dextrt", "dexuntrt"))
head(res_deseq2)
#> log2 fold change (MLE): dextrt vs dexuntrt
#> Wald test p-value: dextrt vs dexuntrt
#> DataFrame with 6 rows and 6 columns
#> baseMean log2FoldChange lfcSE stat pvalue padj
#> <numeric> <numeric> <numeric> <numeric> <numeric> <numeric>
#> ENSG00000000003 708.602170 -0.3812539 0.100654 -3.787752 0.000152016 0.00128292
#> ENSG00000000005 0.000000 NA NA NA NA NA
#> ENSG00000000419 520.297901 0.2068127 0.112219 1.842944 0.065337213 0.19646961
#> ENSG00000000457 237.163037 0.0379205 0.143445 0.264356 0.791505314 0.91141884
#> ENSG00000000460 57.932633 -0.0881679 0.287142 -0.307054 0.758802543 0.89500551
#> ENSG00000000938 0.318098 -1.3782416 3.499906 -0.393794 0.693733216 NA
Then, we embed this set of differential expression results in the
airway
object using the embedContrastResults()
method.
In this instance, the DESeq2
results are stored in a recognisable ?DESeqResults
object,
which can be given as is directly to the
embedContrastResults()
method.
The function will automatically pass the results object to the
iSEEDESeq2Results()
constructor, to identify it as
such.
The results embedded in the airway object can be accessed using the
contrastResults()
function.
airway <- embedContrastResults(res_deseq2, airway, name = "DESeq2")
contrastResults(airway)
#> DataFrame with 63677 rows and 2 columns
#> Limma-Voom DESeq2
#> <iSEELimmaResults> <iSEEDESeq2Results>
#> ENSG00000000003 <iSEELimmaResults> <iSEEDESeq2Results>
#> ENSG00000000005 <iSEELimmaResults> <iSEEDESeq2Results>
#> ENSG00000000419 <iSEELimmaResults> <iSEEDESeq2Results>
#> ENSG00000000457 <iSEELimmaResults> <iSEEDESeq2Results>
#> ENSG00000000460 <iSEELimmaResults> <iSEEDESeq2Results>
#> ... ... ...
#> ENSG00000273489 <iSEELimmaResults> <iSEEDESeq2Results>
#> ENSG00000273490 <iSEELimmaResults> <iSEEDESeq2Results>
#> ENSG00000273491 <iSEELimmaResults> <iSEEDESeq2Results>
#> ENSG00000273492 <iSEELimmaResults> <iSEEDESeq2Results>
#> ENSG00000273493 <iSEELimmaResults> <iSEEDESeq2Results>
contrastResults(airway, "DESeq2")
#> iSEEDESeq2Results with 63677 rows and 6 columns
#> baseMean log2FoldChange lfcSE stat pvalue padj
#> <numeric> <numeric> <numeric> <numeric> <numeric> <numeric>
#> ENSG00000000003 708.6022 -0.3812539 0.100654 -3.787752 0.000152016 0.00128292
#> ENSG00000000005 0.0000 NA NA NA NA NA
#> ENSG00000000419 520.2979 0.2068127 0.112219 1.842944 0.065337213 0.19646961
#> ENSG00000000457 237.1630 0.0379205 0.143445 0.264356 0.791505314 0.91141884
#> ENSG00000000460 57.9326 -0.0881679 0.287142 -0.307054 0.758802543 0.89500551
#> ... ... ... ... ... ... ...
#> ENSG00000273489 0.275899 1.483744 3.51398 0.422240 0.672850 NA
#> ENSG00000273490 0.000000 NA NA NA NA NA
#> ENSG00000273491 0.000000 NA NA NA NA NA
#> ENSG00000273492 0.105978 -0.463688 3.52312 -0.131613 0.895290 NA
#> ENSG00000273493 0.106142 -0.521372 3.53142 -0.147638 0.882628 NA
edgeR
We run a standard edgeR
analysis using glmFit()
and glmLRT()
.
The differential expression results are fetched using
topTags()
.
library("edgeR")
design <- model.matrix(~ 0 + dex + cell, data = colData(airway))
fit <- glmFit(airway, design, dispersion = 0.1)
lrt <- glmLRT(fit, contrast = c(-1, 1, 0, 0, 0))
res_edger <- topTags(lrt, n = Inf)
head(res_edger)
#> Coefficient: -1*dexuntrt 1*dextrt
#> gene_id gene_name entrezid gene_biotype gene_seq_start
#> ENSG00000109906 ENSG00000109906 ZBTB16 NA protein_coding 113930315
#> ENSG00000179593 ENSG00000179593 ALOX15B NA protein_coding 7942335
#> ENSG00000127954 ENSG00000127954 STEAP4 NA protein_coding 87905744
#> ENSG00000152583 ENSG00000152583 SPARCL1 NA protein_coding 88394487
#> ENSG00000250978 ENSG00000250978 RP11-357D18.1 NA processed_transcript 66759637
#> ENSG00000163884 ENSG00000163884 KLF15 NA protein_coding 126061478
#> gene_seq_end seq_name seq_strand seq_coord_system symbol
#> ENSG00000109906 114121398 11 1 NA ZBTB16
#> ENSG00000179593 7952452 17 1 NA ALOX15B
#> ENSG00000127954 87936206 7 -1 NA STEAP4
#> ENSG00000152583 88452213 4 -1 NA SPARCL1
#> ENSG00000250978 66771420 5 -1 NA RP11-357D18.1
#> ENSG00000163884 126076285 3 -1 NA KLF15
#> iSEEde.Limma.Voom.gene_id iSEEde.Limma.Voom.gene_name iSEEde.Limma.Voom.entrezid
#> ENSG00000109906 ENSG00000109906 ZBTB16 NA
#> ENSG00000179593 ENSG00000179593 ALOX15B NA
#> ENSG00000127954 ENSG00000127954 STEAP4 NA
#> ENSG00000152583 ENSG00000152583 SPARCL1 NA
#> ENSG00000250978 ENSG00000250978 RP11-357D18.1 NA
#> ENSG00000163884 ENSG00000163884 KLF15 NA
#> iSEEde.Limma.Voom.gene_biotype iSEEde.Limma.Voom.gene_seq_start
#> ENSG00000109906 protein_coding 113930315
#> ENSG00000179593 protein_coding 7942335
#> ENSG00000127954 protein_coding 87905744
#> ENSG00000152583 protein_coding 88394487
#> ENSG00000250978 processed_transcript 66759637
#> ENSG00000163884 protein_coding 126061478
#> iSEEde.Limma.Voom.gene_seq_end iSEEde.Limma.Voom.seq_name
#> ENSG00000109906 114121398 11
#> ENSG00000179593 7952452 17
#> ENSG00000127954 87936206 7
#> ENSG00000152583 88452213 4
#> ENSG00000250978 66771420 5
#> ENSG00000163884 126076285 3
#> iSEEde.Limma.Voom.seq_strand iSEEde.Limma.Voom.seq_coord_system
#> ENSG00000109906 1 NA
#> ENSG00000179593 1 NA
#> ENSG00000127954 -1 NA
#> ENSG00000152583 -1 NA
#> ENSG00000250978 -1 NA
#> ENSG00000163884 -1 NA
#> iSEEde.Limma.Voom.symbol iSEEde.Limma.Voom.logFC iSEEde.Limma.Voom.AveExpr
#> ENSG00000109906 ZBTB16 7.069003 1.3807218
#> ENSG00000179593 ALOX15B 7.988755 -1.4798754
#> ENSG00000127954 STEAP4 5.184088 1.6193300
#> ENSG00000152583 SPARCL1 4.489009 4.1669039
#> ENSG00000250978 RP11-357D18.1 6.031081 -0.7521822
#> ENSG00000163884 KLF15 4.433096 3.2401058
#> iSEEde.Limma.Voom.t iSEEde.Limma.Voom.P.Value iSEEde.Limma.Voom.adj.P.Val
#> ENSG00000109906 23.94855 4.892822e-09 4.852528e-06
#> ENSG00000179593 21.82342 1.743170e-06 1.076551e-04
#> ENSG00000127954 20.01478 2.162145e-08 1.012605e-05
#> ENSG00000152583 27.34820 1.622327e-09 4.309046e-06
#> ENSG00000250978 16.32481 1.154612e-07 2.187276e-05
#> ENSG00000163884 22.89074 7.117995e-09 5.425717e-06
#> iSEEde.Limma.Voom.B iSEEde.DESeq2.baseMean iSEEde.DESeq2.log2FoldChange
#> ENSG00000109906 8.652823 385.07103 7.352629
#> ENSG00000179593 2.986534 67.24305 9.505983
#> ENSG00000127954 9.354944 286.38412 5.207161
#> ENSG00000152583 12.334016 997.43977 4.574919
#> ENSG00000250978 6.074174 56.31819 6.327386
#> ENSG00000163884 10.885003 561.10717 4.459129
#> iSEEde.DESeq2.lfcSE iSEEde.DESeq2.stat iSEEde.DESeq2.pvalue iSEEde.DESeq2.padj
#> ENSG00000109906 0.5363902 13.707612 9.141717e-43 2.256376e-40
#> ENSG00000179593 1.0545033 9.014654 1.974926e-19 1.252965e-17
#> ENSG00000127954 0.4930839 10.560396 4.547384e-26 5.057701e-24
#> ENSG00000152583 0.1840561 24.856114 2.220777e-136 4.001395e-132
#> ENSG00000250978 0.6777980 9.335209 1.007922e-20 7.206645e-19
#> ENSG00000163884 0.2348638 18.986019 2.225778e-80 2.506504e-77
#> logFC logCPM LR PValue FDR
#> ENSG00000109906 7.183385 4.132638 238.3947 8.805179e-54 5.606874e-49
#> ENSG00000179593 10.015847 1.627629 181.0331 2.883024e-41 9.179116e-37
#> ENSG00000127954 5.087069 3.672567 146.9725 7.957020e-34 1.688931e-29
#> ENSG00000152583 4.498698 5.510213 140.2205 2.382274e-32 3.792402e-28
#> ENSG00000250978 6.128131 1.377260 137.4681 9.526183e-32 1.213198e-27
#> ENSG00000163884 4.367962 4.681216 129.2203 6.069471e-30 6.441428e-26
Then, we embed this set of differential expression results in the
airway
object using the embedContrastResults()
method.
In this instance, the edgeR
results are stored in a recognisable ?TopTags
object. As
such, the results object can be given as is directly to the
embedContrastResults()
method. The function will
automatically pass the results object to the
iSEEedgeRResults()
constructor, to identify it as such.
The results embedded in the airway object can be accessed using the
contrastResults()
function.
airway <- embedContrastResults(res_edger, airway, name = "edgeR")
contrastResults(airway)
#> DataFrame with 63677 rows and 3 columns
#> Limma-Voom DESeq2 edgeR
#> <iSEELimmaResults> <iSEEDESeq2Results> <iSEEedgeRResults>
#> ENSG00000000003 <iSEELimmaResults> <iSEEDESeq2Results> <iSEEedgeRResults>
#> ENSG00000000005 <iSEELimmaResults> <iSEEDESeq2Results> <iSEEedgeRResults>
#> ENSG00000000419 <iSEELimmaResults> <iSEEDESeq2Results> <iSEEedgeRResults>
#> ENSG00000000457 <iSEELimmaResults> <iSEEDESeq2Results> <iSEEedgeRResults>
#> ENSG00000000460 <iSEELimmaResults> <iSEEDESeq2Results> <iSEEedgeRResults>
#> ... ... ... ...
#> ENSG00000273489 <iSEELimmaResults> <iSEEDESeq2Results> <iSEEedgeRResults>
#> ENSG00000273490 <iSEELimmaResults> <iSEEDESeq2Results> <iSEEedgeRResults>
#> ENSG00000273491 <iSEELimmaResults> <iSEEDESeq2Results> <iSEEedgeRResults>
#> ENSG00000273492 <iSEELimmaResults> <iSEEDESeq2Results> <iSEEedgeRResults>
#> ENSG00000273493 <iSEELimmaResults> <iSEEDESeq2Results> <iSEEedgeRResults>
contrastResults(airway, "edgeR")
#> iSEEedgeRResults with 63677 rows and 5 columns
#> logFC logCPM LR PValue FDR
#> <numeric> <numeric> <numeric> <numeric> <numeric>
#> ENSG00000000003 -0.4628153 5.05930 2.018481 0.155394 1
#> ENSG00000000005 0.0000000 -3.45546 0.000000 1.000000 1
#> ENSG00000000419 0.1247724 4.60783 0.146545 0.701860 1
#> ENSG00000000457 -0.0445216 3.48326 0.018241 0.892565 1
#> ENSG00000000460 -0.1618126 1.48518 0.210342 0.646500 1
#> ... ... ... ... ... ...
#> ENSG00000273489 2.48209 -3.28549 3.02143 0.082171 1
#> ENSG00000273490 0.00000 -3.45546 0.00000 1.000000 1
#> ENSG00000273491 0.00000 -3.45546 0.00000 1.000000 1
#> ENSG00000273492 -1.24012 -3.36894 0.91097 0.339857 1
#> ENSG00000273493 -1.75243 -3.36862 1.57193 0.209928 1
Live app
In this example, we used the iSEEde
functions DETable()
, VolcanoPlot()
, and
MAPlot()
to add panels that facilitate the visualisation of
differential expression results in an iSEE
app.
Specifically, we add one set of panels for each differential expression method used in this vignette (i.e., Limma-Voom, DESeq2, edgeR).
library(iSEE)
app <- iSEE(airway, initial = list(
DETable(ContrastName="Limma-Voom", HiddenColumns = c("AveExpr",
"t", "B"), PanelWidth = 4L),
VolcanoPlot(ContrastName = "Limma-Voom", PanelWidth = 4L),
MAPlot(ContrastName = "Limma-Voom", PanelWidth = 4L),
DETable(ContrastName="DESeq2", HiddenColumns = c("baseMean",
"lfcSE", "stat"), PanelWidth = 4L),
VolcanoPlot(ContrastName = "DESeq2", PanelWidth = 4L),
MAPlot(ContrastName = "DESeq2", PanelWidth = 4L),
DETable(ContrastName="edgeR", HiddenColumns = c("logCPM",
"LR"), PanelWidth = 4L),
VolcanoPlot(ContrastName = "edgeR", PanelWidth = 4L),
MAPlot(ContrastName = "edgeR", PanelWidth = 4L)
))
if (interactive()) {
shiny::runApp(app)
}
Comparing two contrasts
The ?LogFCLogFCPlot
class allows users to compare the
log2 fold-change value of features between two differential
expression contrasts.
In this example, we add one ?LogFCLogFCPlot
panel
comparing the same contrast using the Limma-Voom and DESeq2 methods,
alongside one ?VolcanoPlot
panel for each of those two
contrasts. Moreover, we pre-select an area of the
?LogFCLogFCPlot
and highlight the selected features in the
two ?VolcanoPlot
panels.
library(iSEE)
app <- iSEE(airway, initial = list(
VolcanoPlot(ContrastName="Limma-Voom",
RowSelectionSource = "LogFCLogFCPlot1", ColorBy = "Row selection",
PanelWidth = 4L),
LogFCLogFCPlot(ContrastNameX="Limma-Voom", ContrastNameY="DESeq2",
BrushData = list(
xmin = 3.6, xmax = 8.2, ymin = 3.8, ymax = 9.8,
mapping = list(x = "X", y = "Y"),
direction = "xy", brushId = "LogFCLogFCPlot1_Brush",
outputId = "LogFCLogFCPlot1"),
PanelWidth = 4L),
VolcanoPlot(ContrastName="DESeq2",
RowSelectionSource = "LogFCLogFCPlot1", ColorBy = "Row selection",
PanelWidth = 4L)
))
if (interactive()) {
shiny::runApp(app)
}
Reproducibility
The iSEEde package (Rue-Albrecht, 2024) was made possible thanks to:
- R (R Core Team, 2024)
- BiocStyle (Oleś, 2024)
- knitr (Xie, 2024)
- RefManageR (McLean, 2017)
- rmarkdown (Allaire, Xie, Dervieux, McPherson, Luraschi, Ushey, Atkins, Wickham, Cheng, Chang, and Iannone, 2024)
- sessioninfo (Wickham, Chang, Flight, Müller, and Hester, 2021)
- testthat (Wickham, 2011)
This package was developed using biocthis.
Code for creating the vignette
## Create the vignette
library("rmarkdown")
system.time(render("methods.Rmd", "BiocStyle::html_document"))
## Extract the R code
library("knitr")
knit("methods.Rmd", tangle = TRUE)
Date the vignette was generated.
#> [1] "2024-10-31 10:11:12 UTC"
Wallclock time spent generating the vignette.
#> Time difference of 26.831 secs
R
session information.
#> ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.4.1 (2024-06-14)
#> os Ubuntu 22.04.5 LTS
#> system x86_64, linux-gnu
#> ui X11
#> language en
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz UTC
#> date 2024-10-31
#> pandoc 3.4 @ /usr/bin/ (via rmarkdown)
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> abind 1.4-8 2024-09-12 [1] RSPM (R 4.4.0)
#> airway * 1.25.0 2024-05-02 [1] Bioconductor 3.20 (R 4.4.0)
#> backports 1.5.0 2024-05-23 [1] RSPM (R 4.4.0)
#> bibtex 0.5.1 2023-01-26 [1] RSPM (R 4.4.0)
#> Biobase * 2.66.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> BiocGenerics * 0.52.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> BiocManager 1.30.25 2024-08-28 [2] CRAN (R 4.4.1)
#> BiocParallel 1.40.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> BiocStyle * 2.34.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> bookdown 0.41 2024-10-16 [1] RSPM (R 4.4.0)
#> bslib 0.8.0 2024-07-29 [2] RSPM (R 4.4.0)
#> cachem 1.1.0 2024-05-16 [2] RSPM (R 4.4.0)
#> circlize 0.4.16 2024-02-20 [1] RSPM (R 4.4.0)
#> cli 3.6.3 2024-06-21 [2] RSPM (R 4.4.0)
#> clue 0.3-65 2023-09-23 [1] RSPM (R 4.4.0)
#> cluster 2.1.6 2023-12-01 [3] CRAN (R 4.4.1)
#> codetools 0.2-20 2024-03-31 [3] CRAN (R 4.4.1)
#> colorspace 2.1-1 2024-07-26 [1] RSPM (R 4.4.0)
#> colourpicker 1.3.0 2023-08-21 [1] RSPM (R 4.4.0)
#> ComplexHeatmap 2.22.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> crayon 1.5.3 2024-06-20 [2] RSPM (R 4.4.0)
#> DelayedArray 0.32.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> desc 1.4.3 2023-12-10 [2] RSPM (R 4.4.0)
#> DESeq2 * 1.46.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> digest 0.6.37 2024-08-19 [2] RSPM (R 4.4.0)
#> doParallel 1.0.17 2022-02-07 [1] RSPM (R 4.4.0)
#> dplyr 1.1.4 2023-11-17 [1] RSPM (R 4.4.0)
#> DT 0.33 2024-04-04 [1] RSPM (R 4.4.0)
#> edgeR * 4.4.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> evaluate 1.0.1 2024-10-10 [2] RSPM (R 4.4.0)
#> fansi 1.0.6 2023-12-08 [2] RSPM (R 4.4.0)
#> fastmap 1.2.0 2024-05-15 [2] RSPM (R 4.4.0)
#> fontawesome 0.5.2 2023-08-19 [2] RSPM (R 4.4.0)
#> foreach 1.5.2 2022-02-02 [1] RSPM (R 4.4.0)
#> fs 1.6.4 2024-04-25 [2] RSPM (R 4.4.0)
#> generics 0.1.3 2022-07-05 [1] RSPM (R 4.4.0)
#> GenomeInfoDb * 1.42.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> GenomeInfoDbData 1.2.13 2024-10-31 [1] Bioconductor
#> GenomicRanges * 1.58.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> GetoptLong 1.0.5 2020-12-15 [1] RSPM (R 4.4.0)
#> ggplot2 3.5.1 2024-04-23 [1] RSPM (R 4.4.0)
#> ggrepel 0.9.6 2024-09-07 [1] RSPM (R 4.4.0)
#> GlobalOptions 0.1.2 2020-06-10 [1] RSPM (R 4.4.0)
#> glue 1.8.0 2024-09-30 [2] RSPM (R 4.4.0)
#> gtable 0.3.6 2024-10-25 [1] RSPM (R 4.4.0)
#> highr 0.11 2024-05-26 [2] RSPM (R 4.4.0)
#> htmltools 0.5.8.1 2024-04-04 [2] RSPM (R 4.4.0)
#> htmlwidgets 1.6.4 2023-12-06 [2] RSPM (R 4.4.0)
#> httpuv 1.6.15 2024-03-26 [2] RSPM (R 4.4.0)
#> httr 1.4.7 2023-08-15 [1] RSPM (R 4.4.0)
#> igraph 2.1.1 2024-10-19 [1] RSPM (R 4.4.0)
#> IRanges * 2.40.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> iSEE * 2.18.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> iSEEde * 1.5.0 2024-10-31 [1] Bioconductor
#> iterators 1.0.14 2022-02-05 [1] RSPM (R 4.4.0)
#> jquerylib 0.1.4 2021-04-26 [2] RSPM (R 4.4.0)
#> jsonlite 1.8.9 2024-09-20 [2] RSPM (R 4.4.0)
#> knitr 1.48 2024-07-07 [2] RSPM (R 4.4.0)
#> later 1.3.2 2023-12-06 [2] RSPM (R 4.4.0)
#> lattice 0.22-6 2024-03-20 [3] CRAN (R 4.4.1)
#> lifecycle 1.0.4 2023-11-07 [2] RSPM (R 4.4.0)
#> limma * 3.62.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> listviewer 4.0.0 2023-09-30 [1] RSPM (R 4.4.0)
#> locfit 1.5-9.10 2024-06-24 [1] RSPM (R 4.4.0)
#> lubridate 1.9.3 2023-09-27 [1] RSPM (R 4.4.0)
#> magrittr 2.0.3 2022-03-30 [2] RSPM (R 4.4.0)
#> Matrix 1.7-1 2024-10-18 [2] RSPM (R 4.4.0)
#> MatrixGenerics * 1.18.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> matrixStats * 1.4.1 2024-09-08 [1] RSPM (R 4.4.0)
#> memoise 2.0.1 2021-11-26 [2] RSPM (R 4.4.0)
#> mgcv 1.9-1 2023-12-21 [3] CRAN (R 4.4.1)
#> mime 0.12 2021-09-28 [2] RSPM (R 4.4.0)
#> miniUI 0.1.1.1 2018-05-18 [2] RSPM (R 4.4.0)
#> munsell 0.5.1 2024-04-01 [1] RSPM (R 4.4.0)
#> nlme 3.1-166 2024-08-14 [2] RSPM (R 4.4.0)
#> pillar 1.9.0 2023-03-22 [2] RSPM (R 4.4.0)
#> pkgconfig 2.0.3 2019-09-22 [2] RSPM (R 4.4.0)
#> pkgdown 2.1.1 2024-09-17 [2] RSPM (R 4.4.0)
#> plyr 1.8.9 2023-10-02 [1] RSPM (R 4.4.0)
#> png 0.1-8 2022-11-29 [1] RSPM (R 4.4.0)
#> promises 1.3.0 2024-04-05 [2] RSPM (R 4.4.0)
#> R6 2.5.1 2021-08-19 [2] RSPM (R 4.4.0)
#> ragg 1.3.3 2024-09-11 [2] RSPM (R 4.4.0)
#> RColorBrewer 1.1-3 2022-04-03 [1] RSPM (R 4.4.0)
#> Rcpp 1.0.13 2024-07-17 [2] RSPM (R 4.4.0)
#> RefManageR * 1.4.0 2022-09-30 [1] RSPM (R 4.4.0)
#> rintrojs 0.3.4 2024-01-11 [1] RSPM (R 4.4.0)
#> rjson 0.2.23 2024-09-16 [1] RSPM (R 4.4.0)
#> rlang 1.1.4 2024-06-04 [2] RSPM (R 4.4.0)
#> rmarkdown 2.28 2024-08-17 [2] RSPM (R 4.4.0)
#> S4Arrays 1.6.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> S4Vectors * 0.44.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> sass 0.4.9 2024-03-15 [2] RSPM (R 4.4.0)
#> scales 1.3.0 2023-11-28 [1] RSPM (R 4.4.0)
#> sessioninfo * 1.2.2 2021-12-06 [2] RSPM (R 4.4.0)
#> shape 1.4.6.1 2024-02-23 [1] RSPM (R 4.4.0)
#> shiny 1.9.1 2024-08-01 [2] RSPM (R 4.4.0)
#> shinyAce 0.4.3 2024-10-19 [1] RSPM (R 4.4.0)
#> shinydashboard 0.7.2 2021-09-30 [1] RSPM (R 4.4.0)
#> shinyjs 2.1.0 2021-12-23 [1] RSPM (R 4.4.0)
#> shinyWidgets 0.8.7 2024-09-23 [1] RSPM (R 4.4.0)
#> SingleCellExperiment * 1.28.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> SparseArray 1.6.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> statmod 1.5.0 2023-01-06 [1] RSPM (R 4.4.0)
#> stringi 1.8.4 2024-05-06 [2] RSPM (R 4.4.0)
#> stringr 1.5.1 2023-11-14 [2] RSPM (R 4.4.0)
#> SummarizedExperiment * 1.36.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> systemfonts 1.1.0 2024-05-15 [2] RSPM (R 4.4.0)
#> textshaping 0.4.0 2024-05-24 [2] RSPM (R 4.4.0)
#> tibble 3.2.1 2023-03-20 [2] RSPM (R 4.4.0)
#> tidyselect 1.2.1 2024-03-11 [1] RSPM (R 4.4.0)
#> timechange 0.3.0 2024-01-18 [1] RSPM (R 4.4.0)
#> UCSC.utils 1.2.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> utf8 1.2.4 2023-10-22 [2] RSPM (R 4.4.0)
#> vctrs 0.6.5 2023-12-01 [2] RSPM (R 4.4.0)
#> vipor 0.4.7 2023-12-18 [1] RSPM (R 4.4.0)
#> viridisLite 0.4.2 2023-05-02 [1] RSPM (R 4.4.0)
#> xfun 0.48 2024-10-03 [2] RSPM (R 4.4.0)
#> xml2 1.3.6 2023-12-04 [2] RSPM (R 4.4.0)
#> xtable 1.8-4 2019-04-21 [2] RSPM (R 4.4.0)
#> XVector 0.46.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#> yaml 2.3.10 2024-07-26 [2] RSPM (R 4.4.0)
#> zlibbioc 1.52.0 2024-10-29 [1] Bioconductor 3.20 (R 4.4.1)
#>
#> [1] /__w/_temp/Library
#> [2] /usr/local/lib/R/site-library
#> [3] /usr/local/lib/R/library
#>
#> ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Bibliography
This vignette was generated using BiocStyle
r Citep(bib[["BiocStyle"]])
with knitr (Xie,
2024) and rmarkdown
(Allaire, Xie, Dervieux et al., 2024) running behind the scenes.
Citations made with RefManageR (McLean, 2017).
[1] J. Allaire, Y. Xie, C. Dervieux, et al. rmarkdown: Dynamic Documents for R. R package version 2.28. 2024. URL: https://github.com/rstudio/rmarkdown.
[2] M. W. McLean. “RefManageR: Import and Manage BibTeX and BibLaTeX References in R”. In: The Journal of Open Source Software (2017). DOI: 10.21105/joss.00338.
[3] A. Oleś. BiocStyle: Standard styles for vignettes and other Bioconductor documents. R package version 2.34.0. 2024. DOI: 10.18129/B9.bioc.BiocStyle. URL: https://bioconductor.org/packages/BiocStyle.
[4] R Core Team. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. Vienna, Austria, 2024. URL: https://www.R-project.org/.
[5] K. Rue-Albrecht. iSEEde: iSEE extension for panels related to differential expression analysis. R package version 1.5.0. 2024. URL: https://github.com/iSEE/iSEEde.
[6] H. Wickham. “testthat: Get Started with Testing”. In: The R Journal 3 (2011), pp. 5–10. URL: https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Wickham.pdf.
[7] H. Wickham, W. Chang, R. Flight, et al. sessioninfo: R Session Information. R package version 1.2.2, https://r-lib.github.io/sessioninfo/. 2021. URL: https://github.com/r-lib/sessioninfo#readme.
[8] Y. Xie. knitr: A General-Purpose Package for Dynamic Report Generation in R. R package version 1.48. 2024. URL: https://yihui.org/knitr/.