In this vignette, we use the example of a differential expression and pathway analysis workflow on a real data set to demonstrate how a selection made in a panel of pathway analysis results may be transmitted to other row-oriented panels in the iSEE application.
We use the ?airway
data set.
We briefly adjust the reference level of the treatment factor to the untreated condition.
We also map the Ensembl gene identifiers to more recognisable gene symbols, setting row names to a unique identifier composed of either gene symbol, gene identifier, of a concatenate of both.
Although not essential, this implicitly defines the primary piece of
information displayed for genes in the live app. No information is lost
in the process, as the original Ensembl identifier and the corresponding
gene symbol are both stored in the rowData()
of the
object.
library("org.Hs.eg.db")
library("scater")
rowData(airway)[["ENSEMBL"]] <- rownames(airway)
rowData(airway)[["SYMBOL"]] <- mapIds(org.Hs.eg.db, rownames(airway), "SYMBOL", "ENSEMBL")
rowData(airway)[["uniquifyFeatureNames"]] <- uniquifyFeatureNames(
ID = rowData(airway)[["ENSEMBL"]],
names = rowData(airway)[["SYMBOL"]]
)
rownames(airway) <- rowData(airway)[["uniquifyFeatureNames"]]
We also compute log-transformed counts, for a better visualisation of differential expression in the live app.
We run a standard Limma-Voom analysis using
limma::voom()
, limma::lmFit()
,
limma::makeContrasts()
, and
limma::eBayes()
.
library("edgeR")
counts <- assay(airway, "counts")
design <- model.matrix(~ 0 + dex + cell, data = colData(airway))
keep <- filterByExpr(counts, design)
v <- voom(counts[keep,], design, plot=FALSE)
fit <- lmFit(v, design)
contr <- makeContrasts("dextrt - dexuntrt", levels = colnames(coef(fit)))
tmp <- contrasts.fit(fit, contr)
tmp <- eBayes(tmp)
res_limma <- topTable(tmp, sort.by = "P", n = Inf)
head(res_limma)
#> logFC AveExpr t P.Value adj.P.Val B
#> CACNB2 3.205598 3.682244 36.49009 2.370569e-11 3.996779e-07 16.03257
#> DUSP1 2.864775 6.644455 28.95296 2.000429e-10 9.657686e-07 14.66891
#> MAOA 3.256099 5.950559 28.29381 2.472372e-10 9.657686e-07 14.44796
#> SPARCL1 4.489075 4.166904 27.99497 2.725926e-10 9.657686e-07 14.01663
#> PRSS35 -2.828186 3.224885 -27.47899 3.234271e-10 9.657686e-07 13.80831
#> STEAP2 1.894563 6.790009 26.91396 3.914512e-10 9.657686e-07 14.03974
Then, we embed this set of differential expression results in the
?airway
object using the
iSEEde::embedContrastResults()
method.
library("iSEEde")
airway <- iSEEde::embedContrastResults(res_limma, airway, name = "Limma-Voom", class = "limma")
rowData(airway)
#> DataFrame with 63677 rows and 14 columns
#> gene_id gene_name entrezid gene_biotype gene_seq_start gene_seq_end
#> <character> <character> <integer> <character> <integer> <integer>
#> TSPAN6 ENSG00000000003 TSPAN6 NA protein_coding 99883667 99894988
#> TNMD ENSG00000000005 TNMD NA protein_coding 99839799 99854882
#> DPM1 ENSG00000000419 DPM1 NA protein_coding 49551404 49575092
#> SCYL3 ENSG00000000457 SCYL3 NA protein_coding 169818772 169863408
#> FIRRM ENSG00000000460 C1orf112 NA protein_coding 169631245 169823221
#> ... ... ... ... ... ... ...
#> ENSG00000273489 ENSG00000273489 RP11-180C16.1 NA antisense 131178723 131182453
#> ENSG00000273490 ENSG00000273490 TSEN34 NA protein_coding 54693789 54697585
#> ENSG00000273491 ENSG00000273491 RP11-138A9.2 NA lincRNA 130600118 130603315
#> APP-DT ENSG00000273492 AP000230.1 NA lincRNA 27543189 27589700
#> ENSG00000273493 ENSG00000273493 RP11-80H18.4 NA lincRNA 58315692 58315845
#> seq_name seq_strand seq_coord_system symbol ENSEMBL SYMBOL
#> <character> <integer> <integer> <character> <character> <character>
#> TSPAN6 X -1 NA TSPAN6 ENSG00000000003 TSPAN6
#> TNMD X 1 NA TNMD ENSG00000000005 TNMD
#> DPM1 20 -1 NA DPM1 ENSG00000000419 DPM1
#> SCYL3 1 -1 NA SCYL3 ENSG00000000457 SCYL3
#> FIRRM 1 1 NA C1orf112 ENSG00000000460 FIRRM
#> ... ... ... ... ... ... ...
#> ENSG00000273489 7 -1 NA RP11-180C16.1 ENSG00000273489 NA
#> ENSG00000273490 HSCHR19LRC_LRC_J_CTG1 1 NA TSEN34 ENSG00000273490 NA
#> ENSG00000273491 HG1308_PATCH 1 NA RP11-138A9.2 ENSG00000273491 NA
#> APP-DT 21 1 NA AP000230.1 ENSG00000273492 APP-DT
#> ENSG00000273493 3 1 NA RP11-80H18.4 ENSG00000273493 NA
#> uniquifyFeatureNames iSEEde
#> <character> <DataFrame>
#> TSPAN6 TSPAN6 <iSEELimmaResults>
#> TNMD TNMD <iSEELimmaResults>
#> DPM1 DPM1 <iSEELimmaResults>
#> SCYL3 SCYL3 <iSEELimmaResults>
#> FIRRM FIRRM <iSEELimmaResults>
#> ... ... ...
#> ENSG00000273489 ENSG00000273489 <iSEELimmaResults>
#> ENSG00000273490 ENSG00000273490 <iSEELimmaResults>
#> ENSG00000273491 ENSG00000273491 <iSEELimmaResults>
#> APP-DT APP-DT <iSEELimmaResults>
#> ENSG00000273493 ENSG00000273493 <iSEELimmaResults>
We prepare Gene Ontology gene sets of biological pathways using org.Hs.eg.db.
Due to the use of uniquifyFeatureNames()
above, we must
first map pathway identifiers to the unique Ensembl gene identifier, to
accurately perform pathway analysis using the feature identifiers
matching those of the embedded differential expression results.
library("org.Hs.eg.db")
pathways <- select(org.Hs.eg.db, keys(org.Hs.eg.db, "ENSEMBL"), c("GOALL"), keytype = "ENSEMBL")
#> 'select()' returned 1:many mapping between keys and columns
pathways <- subset(pathways, ONTOLOGYALL == "BP")
pathways <- unique(pathways[, c("ENSEMBL", "GOALL")])
pathways <- merge(pathways, rowData(airway)[, c("ENSEMBL", "uniquifyFeatureNames")])
pathways <- split(pathways$uniquifyFeatureNames, pathways$GOALL)
Separately, we define and register a function that fetches the gene identifiers associated with a given pathway identifier. This function is required to transmit selections from pathway-level panels to feature-level panels.
Due to the use of uniquifyFeatureNames()
above, the
function must first map to the unique Ensembl gene identifier, to
accurately identify the corresponding value in
rownames(airway)
.
map_GO <- function(pathway_id, se) {
pathway_ensembl <- mapIds(org.Hs.eg.db, pathway_id, "ENSEMBL", keytype = "GOALL", multiVals = "CharacterList")[[pathway_id]]
pathway_rownames <- rownames(se)[rowData(se)[["gene_id"]] %in% pathway_ensembl]
pathway_rownames
}
airway <- registerAppOptions(airway, Pathways.map.functions = list(GO = map_GO))
We run a standard GSEA analysis using fgsea.
library("fgsea")
set.seed(42)
stats <- na.omit(log2FoldChange(contrastResults(airway, "Limma-Voom")))
fgseaRes <- fgsea(pathways = pathways,
stats = stats,
minSize = 15,
maxSize = 500)
#> Warning in preparePathwaysAndStats(pathways, stats, minSize, maxSize, gseaParam, : There are ties in the preranked stats (0.05% of the list).
#> The order of those tied genes will be arbitrary, which may produce unexpected results.
head(fgseaRes[order(pval), ])
#> pathway pval padj log2err ES NES size leadingEdge
#> <char> <num> <num> <num> <num> <num> <int> <list>
#> 1: GO:0046323 9.103491e-07 0.003970943 0.6594444 0.6486846 2.224200 60 KLF15, L....
#> 2: GO:0010827 6.238470e-06 0.009773977 0.6105269 0.6201464 2.121587 58 KLF15, L....
#> 3: GO:1904659 6.853398e-06 0.009773977 0.6105269 0.5632978 2.059816 85 KLF15, L....
#> 4: GO:0046324 8.962840e-06 0.009773977 0.5933255 0.6682559 2.181621 46 KLF15, L....
#> 5: GO:0031589 1.236526e-05 0.010787455 0.5933255 0.3877520 1.654913 289 FAM107A,....
#> 6: GO:0008645 1.627544e-05 0.011832248 0.5756103 0.5465959 2.003417 87 KLF15, L....
Then, we embed this set of pathway analysis results in the
airway
object, using the
?iSEEpathways::embedPathwaysResults
method.
But first, we reorder the results by increasing p-value. Although not essential, this implicitly defines the default ordering of the table in the live app.
library("iSEEpathways")
fgseaRes <- fgseaRes[order(pval), ]
airway <- embedPathwaysResults(
fgseaRes, airway, name = "fgsea (p-value)", class = "fgsea",
pathwayType = "GO", pathwaysList = pathways, featuresStats = stats)
airway
#> class: RangedSummarizedExperiment
#> dim: 63677 8
#> metadata(3): '' iSEE iSEEpathways
#> assays(2): counts logcounts
#> rownames(63677): TSPAN6 TNMD ... APP-DT ENSG00000273493
#> rowData names(14): gene_id gene_name ... uniquifyFeatureNames iSEEde
#> colnames(8): SRR1039508 SRR1039509 ... SRR1039520 SRR1039521
#> colData names(9): SampleName cell ... Sample BioSample
To showcase a choice of pathway analysis results in the live app, we repeat the process above, this time sorting by a different score that combines the log-transformed p-value and the absolute log-transformed fold-change.
stats <- na.omit(
log2FoldChange(contrastResults(airway, "Limma-Voom")) *
-log10(pValue(contrastResults(airway, "Limma-Voom")))
)
set.seed(42)
fgseaRes <- fgsea(pathways = pathways,
stats = na.omit(stats),
minSize = 15,
maxSize = 500)
fgseaRes <- fgseaRes[order(pval), ]
airway <- embedPathwaysResults(
fgseaRes, airway, name = "fgsea (p-value & fold-change)", class = "fgsea",
pathwayType = "GO", pathwaysList = pathways, featuresStats = stats)
airway
#> class: RangedSummarizedExperiment
#> dim: 63677 8
#> metadata(3): '' iSEE iSEEpathways
#> assays(2): counts logcounts
#> rownames(63677): TSPAN6 TNMD ... APP-DT ENSG00000273493
#> rowData names(14): gene_id gene_name ... uniquifyFeatureNames iSEEde
#> colnames(8): SRR1039508 SRR1039509 ... SRR1039520 SRR1039521
#> colData names(9): SampleName cell ... Sample BioSample
For further user-friendliness in the live app, we define and register a function that displays details for the selected Gene Ontology gene set using the GO.db package.
library("GO.db")
library("shiny")
library("iSEE")
go_details <- function(x) {
info <- select(GO.db, x, c("TERM", "ONTOLOGY", "DEFINITION"), "GOID")
html <- list(p(strong(info$GOID), ":", info$TERM, paste0("(", info$ONTOLOGY, ")")))
if (!is.na(info$DEFINITION)) {
html <- append(html, list(p(info$DEFINITION)))
}
tagList(html)
}
airway <- registerAppOptions(airway, PathwaysTable.select.details = go_details)
Finally, we configure the initial state and launch the live app.
app <- iSEE(airway, initial = list(
PathwaysTable(ResultName="fgsea (p-value)", Selected = "GO:0046324", PanelWidth = 4L),
VolcanoPlot(RowSelectionSource = "PathwaysTable1", ColorBy = "Row selection", PanelWidth = 4L),
ComplexHeatmapPlot(RowSelectionSource = "PathwaysTable1",
PanelWidth = 4L, PanelHeight = 700L,
CustomRows = FALSE, ColumnData = "dex",
ClusterRows = TRUE, ClusterRowsDistance = "euclidean", AssayCenterRows = TRUE),
FgseaEnrichmentPlot(ResultName="fgsea (p-value)", PathwayId = "GO:0046324", PanelWidth = 12L)
))
if (interactive()) {
shiny::runApp(app)
}
The function map_GO()
that we defined earlier above – to
map a pathway identifier to a set of gene identifiers – uses the org.Hs.eg.db
package and the ?AnnotationDbi::select()
function.
While memory-efficient, the repeated calls to the database of gene annotations introduce a bottleneck that limits the reactivity of the app.
We can improve the speed of the app rendering by trading off an
increased memory usage. Specifically, we can use the object
pathways
that we created earlier as a named list of pathway
identifiers and character vectors of gene identifiers associated with
each pathway, instead of querying the GO.db
database.
First, for the app to be self-contained, the list of pathways should
be stored within the airway
object itself. For instance, we
store those in the metadata()
of the airway
object.
Then, we can write a new, faster, function that fetches gene
identifiers directly from that list rather than the database. The
function should take as first argument a single pathway identifier, and
the second argument must be called se
to match the name of
the SummarizedExperiment
object used within the app.
As a a trade off, the app now relies on the list of pathway
annotations being available in the metadata of the se
object, using additional memory for the benefit of dramatically faster
access.
map_GO_v2 <- function(pathway_id, se) {
pathway_list <- metadata(se)[["pathways"]][["GO"]]
if (!pathway_id %in% names(pathway_list)) {
warning("Pathway identifier %s not found.", sQuote(pathway_id))
return(character(0))
}
pathway_list[[pathway_id]]
}
airway <- registerAppOptions(airway, Pathways.map.functions = list(GO = map_GO_v2))
We can then launch a new instance of the app, using the same initial
configuration, but the update airway
object.
app <- iSEE(airway, initial = list(
PathwaysTable(ResultName="fgsea (p-value)", Selected = "GO:0046324", PanelWidth = 4L),
VolcanoPlot(RowSelectionSource = "PathwaysTable1", ColorBy = "Row selection", PanelWidth = 4L),
ComplexHeatmapPlot(RowSelectionSource = "PathwaysTable1",
PanelWidth = 4L, PanelHeight = 700L,
CustomRows = FALSE, ColumnData = "dex",
ClusterRows = TRUE, ClusterRowsDistance = "euclidean", AssayCenterRows = TRUE),
FgseaEnrichmentPlot(ResultName="fgsea (p-value)", PathwayId = "GO:0046324", PanelWidth = 12L)
))
if (interactive()) {
shiny::runApp(app)
}
The iSEEpathways package (Rue-Albrecht and Soneson, 2024) was made possible thanks to:
This package was developed using biocthis.
Code for creating the vignette
## Create the vignette
library("rmarkdown")
system.time(render("integration.Rmd", "BiocStyle::html_document"))
## Extract the R code
library("knitr")
knit("integration.Rmd", tangle = TRUE)
Date the vignette was generated.
#> [1] "2024-10-30 08:36:41 UTC"
Wallclock time spent generating the vignette.
#> Time difference of 43.333 secs
R
session information.
#> ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.4.1 (2024-06-14)
#> os Ubuntu 24.04.1 LTS
#> system x86_64, linux-gnu
#> ui X11
#> language (EN)
#> collate C
#> ctype en_US.UTF-8
#> tz Etc/UTC
#> date 2024-10-30
#> pandoc 3.2.1 @ /usr/local/bin/ (via rmarkdown)
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> abind 1.4-8 2024-09-12 [2] RSPM (R 4.4.0)
#> airway * 1.25.0 2024-05-02 [2] Bioconductor 3.20 (R 4.4.1)
#> AnnotationDbi * 1.69.0 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> backports 1.5.0 2024-05-23 [2] RSPM (R 4.4.0)
#> beachmat 2.23.0 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> beeswarm 0.4.0 2021-06-01 [2] RSPM (R 4.4.0)
#> bibtex 0.5.1 2023-01-26 [2] RSPM (R 4.4.0)
#> Biobase * 2.67.0 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> BiocGenerics * 0.53.0 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> BiocManager 1.30.25 2024-08-28 [2] RSPM (R 4.4.0)
#> BiocNeighbors 2.1.0 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> BiocParallel 1.41.0 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> BiocSingular 1.23.0 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> BiocStyle * 2.35.0 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> Biostrings 2.75.0 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> bit 4.5.0 2024-09-20 [2] RSPM (R 4.4.0)
#> bit64 4.5.2 2024-09-22 [2] RSPM (R 4.4.0)
#> blob 1.2.4 2023-03-17 [2] RSPM (R 4.4.0)
#> bslib 0.8.0 2024-07-29 [2] RSPM (R 4.4.0)
#> buildtools 1.0.0 2024-10-28 [3] local (/pkg)
#> cachem 1.1.0 2024-05-16 [2] RSPM (R 4.4.0)
#> circlize 0.4.16 2024-02-20 [2] 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 [2] RSPM (R 4.4.0)
#> cluster 2.1.6 2023-12-01 [2] RSPM (R 4.4.0)
#> codetools 0.2-20 2024-03-31 [2] RSPM (R 4.4.0)
#> colorspace 2.1-1 2024-07-26 [2] RSPM (R 4.4.0)
#> colourpicker 1.3.0 2023-08-21 [2] RSPM (R 4.4.0)
#> ComplexHeatmap 2.23.0 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> cowplot 1.1.3 2024-01-22 [2] RSPM (R 4.4.0)
#> crayon 1.5.3 2024-06-20 [2] RSPM (R 4.4.0)
#> data.table 1.16.2 2024-10-10 [2] RSPM (R 4.4.0)
#> DBI 1.2.3 2024-06-02 [2] RSPM (R 4.4.0)
#> DelayedArray 0.33.1 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> DESeq2 1.47.0 2024-10-30 [2] https://bioc.r-universe.dev (R 4.4.1)
#> digest 0.6.37 2024-08-19 [2] RSPM (R 4.4.0)
#> doParallel 1.0.17 2022-02-07 [2] RSPM (R 4.4.0)
#> DT 0.33 2024-04-04 [2] RSPM (R 4.4.0)
#> edgeR * 4.3.21 2024-10-28 [2] https://bioc.r-universe.dev (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)
#> fastmatch 1.1-4 2023-08-18 [2] RSPM (R 4.4.0)
#> fgsea * 1.31.6 2024-10-09 [2] https://bioc.r-universe.dev (R 4.4.1)
#> fontawesome 0.5.2 2023-08-19 [2] RSPM (R 4.4.0)
#> foreach 1.5.2 2022-02-02 [2] RSPM (R 4.4.0)
#> generics 0.1.3 2022-07-05 [2] RSPM (R 4.4.0)
#> GenomeInfoDb * 1.41.2 2024-10-02 [2] https://bioc.r-universe.dev (R 4.4.1)
#> GenomeInfoDbData 1.2.13 2024-10-30 [2] Bioconductor
#> GenomicRanges * 1.57.2 2024-10-29 [2] https://bioc.r-universe.dev (R 4.4.1)
#> GetoptLong 1.0.5 2020-12-15 [2] RSPM (R 4.4.0)
#> ggbeeswarm 0.7.2 2023-04-29 [2] RSPM (R 4.4.0)
#> ggplot2 * 3.5.1 2024-04-23 [2] RSPM (R 4.4.0)
#> ggrepel 0.9.6 2024-09-07 [2] RSPM (R 4.4.0)
#> GlobalOptions 0.1.2 2020-06-10 [2] RSPM (R 4.4.0)
#> glue 1.8.0 2024-09-30 [2] RSPM (R 4.4.0)
#> GO.db * 3.20.0 2024-10-30 [2] Bioconductor
#> gridExtra 2.3 2017-09-09 [2] RSPM (R 4.4.0)
#> gtable 0.3.6 2024-10-25 [2] 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 [2] RSPM (R 4.4.0)
#> igraph 2.1.1 2024-10-19 [2] RSPM (R 4.4.0)
#> IRanges * 2.39.2 2024-10-25 [2] https://bioc.r-universe.dev (R 4.4.1)
#> irlba 2.3.5.1 2022-10-03 [2] RSPM (R 4.4.0)
#> iSEE * 2.17.4 2024-10-08 [2] https://bioc.r-universe.dev (R 4.4.1)
#> iSEEde * 1.3.1 2024-10-17 [2] https://bioc.r-universe.dev (R 4.4.1)
#> iSEEpathways * 1.5.0 2024-10-30 [1] https://bioc.r-universe.dev (R 4.4.1)
#> iterators 1.0.14 2022-02-05 [2] 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)
#> KEGGREST 1.45.1 2024-10-16 [2] https://bioc.r-universe.dev (R 4.4.1)
#> 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 [2] RSPM (R 4.4.0)
#> lifecycle 1.0.4 2023-11-07 [2] RSPM (R 4.4.0)
#> limma * 3.61.12 2024-10-01 [2] https://bioc.r-universe.dev (R 4.4.1)
#> listviewer 4.0.0 2023-09-30 [2] RSPM (R 4.4.0)
#> locfit 1.5-9.10 2024-06-24 [2] RSPM (R 4.4.0)
#> lubridate 1.9.3 2023-09-27 [2] RSPM (R 4.4.0)
#> magrittr 2.0.3 2022-03-30 [2] RSPM (R 4.4.0)
#> maketools 1.3.1 2024-10-28 [3] Github (jeroen/maketools@d46f92c)
#> Matrix 1.7-1 2024-10-18 [2] RSPM (R 4.4.0)
#> MatrixGenerics * 1.17.1 2024-10-23 [2] https://bioc.r-universe.dev (R 4.4.1)
#> matrixStats * 1.4.1 2024-09-08 [2] 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 [2] RSPM (R 4.4.0)
#> 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 [2] RSPM (R 4.4.0)
#> nlme 3.1-166 2024-08-14 [2] RSPM (R 4.4.0)
#> org.Hs.eg.db * 3.20.0 2024-10-30 [2] Bioconductor
#> 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)
#> plyr 1.8.9 2023-10-02 [2] RSPM (R 4.4.0)
#> png 0.1-8 2022-11-29 [2] 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)
#> RColorBrewer 1.1-3 2022-04-03 [2] 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 [2] RSPM (R 4.4.0)
#> rintrojs 0.3.4 2024-01-11 [2] RSPM (R 4.4.0)
#> rjson 0.2.23 2024-09-16 [2] 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)
#> RSQLite 2.3.7 2024-05-27 [2] RSPM (R 4.4.0)
#> rsvd 1.0.5 2021-04-16 [2] RSPM (R 4.4.0)
#> S4Arrays 1.5.11 2024-10-29 [2] https://bioc.r-universe.dev (R 4.4.1)
#> S4Vectors * 0.43.2 2024-10-17 [2] https://bioc.r-universe.dev (R 4.4.1)
#> sass 0.4.9 2024-03-15 [2] RSPM (R 4.4.0)
#> ScaledMatrix 1.13.0 2024-10-28 [2] https://bioc.r-universe.dev (R 4.4.1)
#> scales 1.3.0 2023-11-28 [2] RSPM (R 4.4.0)
#> scater * 1.33.4 2024-10-17 [2] https://bioc.r-universe.dev (R 4.4.1)
#> scuttle * 1.15.5 2024-10-27 [2] https://bioc.r-universe.dev (R 4.4.1)
#> sessioninfo * 1.2.2 2021-12-06 [2] RSPM (R 4.4.0)
#> shape 1.4.6.1 2024-02-23 [2] 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 [2] RSPM (R 4.4.0)
#> shinydashboard 0.7.2 2021-09-30 [2] RSPM (R 4.4.0)
#> shinyjs 2.1.0 2021-12-23 [2] RSPM (R 4.4.0)
#> shinyWidgets 0.8.7 2024-09-23 [2] RSPM (R 4.4.0)
#> SingleCellExperiment * 1.27.2 2024-10-26 [2] https://bioc.r-universe.dev (R 4.4.1)
#> SparseArray 1.5.45 2024-10-29 [2] https://bioc.r-universe.dev (R 4.4.1)
#> statmod 1.5.0 2023-01-06 [2] 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.35.5 2024-10-29 [2] https://bioc.r-universe.dev (R 4.4.1)
#> sys 3.4.3 2024-10-04 [2] RSPM (R 4.4.0)
#> tibble 3.2.1 2023-03-20 [2] RSPM (R 4.4.0)
#> timechange 0.3.0 2024-01-18 [2] RSPM (R 4.4.0)
#> UCSC.utils 1.1.0 2024-10-29 [2] https://bioc.r-universe.dev (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 [2] RSPM (R 4.4.0)
#> viridis 0.6.5 2024-01-29 [2] RSPM (R 4.4.0)
#> viridisLite 0.4.2 2023-05-02 [2] RSPM (R 4.4.0)
#> withr 3.0.2 2024-10-28 [2] 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.45.0 2024-10-02 [2] https://bioc.r-universe.dev (R 4.4.1)
#> yaml 2.3.10 2024-07-26 [2] RSPM (R 4.4.0)
#> zlibbioc 1.51.2 2024-10-21 [2] Bioconductor 3.20 (R 4.4.1)
#>
#> [1] /tmp/RtmpVwilY3/Rinst23856dd1d35e
#> [2] /github/workspace/pkglib
#> [3] /usr/local/lib/R/site-library
#> [4] /usr/lib/R/site-library
#> [5] /usr/lib/R/library
#>
#> ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
This vignette was generated using BiocStyle (Oleś, 2024) 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.35.0. 2024. URL: https://github.com/Bioconductor/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 and C. Soneson. iSEEpathways: iSEE extension for panels related to pathway analysis. R package version 1.5.0. 2024. URL: https://github.com/iSEE/iSEEpathways.
[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/.