# Working with the Gene Ontology

Kevin Rue-Albrecht1*

1University of Oxford

*kevin.rue-albrecht@imm.ox.ac.uk

#### 15 April 2025

#### Package

iSEEpathways 1.6.0

# 1 Scenario

In this vignette, we demonstrate how one may use the package GO.db to dynamically display additional information about selected pathways in the interactive user interface.

# 2 Demonstration

## 2.1 Example data

First, we generate pathway analysis results for simulated data using fgsea.

In particular, we use the package org.Hs.eg.db to fetch real gene sets. To reduce memory footprint, we retain only the gene sets associated with 15 to 500 genes.

Then, we simulate a score for each of the gene present in any of those remaining gene sets. In practice, that score could be the log2 fold-change of the gene in a differential expression analysis (among other possibilities).

Finally, we perform an FGSEA on the simulated data.

    library("org.Hs.eg.db")
    library("fgsea")

    # Example data ----

    ## Pathways
    pathways <- select(org.Hs.eg.db, keys(org.Hs.eg.db, "SYMBOL"), c("GOALL"), keytype = "SYMBOL")
    pathways <- subset(pathways, ONTOLOGYALL == "BP")
    pathways <- unique(pathways[, c("SYMBOL", "GOALL")])
    pathways <- split(pathways$SYMBOL, pathways$GOALL)
    len_pathways <- lengths(pathways)
    pathways <- pathways[len_pathways > 15 & len_pathways < 500]

    ## Features
    set.seed(1)
    # simulate a score for all genes found across all pathways
    feature_stats <- rnorm(length(unique(unlist(pathways))))
    names(feature_stats) <- unique(unlist(pathways))
    # arbitrarily select a pathway to simulate enrichment
    pathway_id <- "GO:0046324"
    pathway_genes <- pathways[[pathway_id]]
    # increase score of genes in the selected pathway to simulate enrichment
    feature_stats[pathway_genes] <- feature_stats[pathway_genes] + 1

    # fgsea ----

    set.seed(42)
    fgseaRes <- fgsea(pathways = pathways,
                      stats    = feature_stats,
                      minSize  = 15,
                      maxSize  = 500)
    head(fgseaRes[order(pval), ])
    #>       pathway         pval         padj   log2err        ES      NES  size
    #>        <char>        <num>        <num>     <num>     <num>    <num> <int>
    #> 1: GO:0046324 2.068614e-13 1.013621e-09 0.9436322 0.6757968 2.761922    60
    #> 2: GO:0046323 6.677958e-12 1.636100e-08 0.8870750 0.5957917 2.597545    83
    #> 3: GO:0046326 5.838600e-10 7.175593e-07 0.8012156 0.7101961 2.632804    37
    #> 4: GO:0010827 6.104566e-10 7.175593e-07 0.8012156 0.5805686 2.499926    78
    #> 5: GO:1904659 7.322033e-10 7.175593e-07 0.8012156 0.5115471 2.353382   112
    #> 6: GO:0010828 9.306697e-10 7.600469e-07 0.8012156 0.6743477 2.541098    44
    #>     leadingEdge
    #>          <list>
    #> 1: SLC1A2, ....
    #> 2: SLC2A9, ....
    #> 3: SLC1A2, ....
    #> 4: SLC1A2, ....
    #> 5: SLC2A9, ....
    #> 6: SLC1A2, ....

Then, we embed the fgsea results in a SummarizedExperiment object.

In this case, we create an empty `?SummarizedExperiment-class` object, without any simulated count data nor metadata, as we will not be using any of those data in this example.

We then embed the pathway analysis results in the newly created `?SummarizedExperiment-class` object.

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("SummarizedExperiment")
    library("iSEEpathways")
    se <- SummarizedExperiment()
    fgseaRes <- fgseaRes[order(pval), ]
    se <- embedPathwaysResults(fgseaRes, se, name = "fgsea", class = "fgsea", pathwayType = "GO")

## 2.2 Pathway information

In this example, we configure the app option `PathwaysTable.select.details` to define a function that, given the identifier of the GO term currently selected in a panel, displays information about that GO term.

Although not essential, this is a user-friendly and immediate way to ‘translate’ machine-friendly database identifiers into human-friendly descriptions.

    library("iSEE")
    library("GO.db")
    library("shiny")
    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)
    }
    se <- registerAppOptions(se, PathwaysTable.select.details = go_details)

## 2.3 Live app

Finally, we configure the app initial state and launch the live app.

    app <- iSEE(se, initial = list(
      PathwaysTable(ResultName="fgsea", Selected = "GO:0046324", PanelWidth = 12L)
    ))

    if (interactive()) {
      shiny::runApp(app)
    }

# 3 Reproducibility

The iSEEpathways package (Rue-Albrecht and Soneson, 2025) was made possible thanks to:

- R (R Core Team, 2025)
- BiocStyle (Oleś, 2025)
- knitr (Xie, 2025)
- 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, 2025)
- testthat (Wickham, 2011)

This package was developed using biocthis.

Code for creating the vignette

    ## Create the vignette
    library("rmarkdown")
    system.time(render("gene-ontology.Rmd", "BiocStyle::html_document"))

    ## Extract the R code
    library("knitr")
    knit("gene-ontology.Rmd", tangle = TRUE)

Date the vignette was generated.

    #> [1] "2025-04-15 17:57:02 EDT"

Wallclock time spent generating the vignette.

    #> Time difference of 25.39 secs

`R` session information.

    #> ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
    #>  setting  value
    #>  version  R version 4.5.0 RC (2025-04-04 r88126)
    #>  os       macOS Ventura 13.7.1
    #>  system   aarch64, darwin20
    #>  ui       X11
    #>  language (EN)
    #>  collate  C
    #>  ctype    en_US.UTF-8
    #>  tz       America/New_York
    #>  date     2025-04-15
    #>  pandoc   3.1.12.3 @ /opt/homebrew/bin/ (via rmarkdown)
    #>  quarto   1.4.552 @ /usr/local/bin/quarto
    #>
    #> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
    #>  package              * version date (UTC) lib source
    #>  abind                  1.4-8   2024-09-12 [2] CRAN (R 4.5.0)
    #>  AnnotationDbi        * 1.70.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  backports              1.5.0   2024-05-23 [2] CRAN (R 4.5.0)
    #>  bibtex                 0.5.1   2023-01-26 [2] CRAN (R 4.5.0)
    #>  Biobase              * 2.68.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  BiocGenerics         * 0.54.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  BiocManager            1.30.25 2024-08-28 [2] CRAN (R 4.5.0)
    #>  BiocParallel           1.42.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  BiocStyle            * 2.36.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  Biostrings             2.76.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  bit                    4.6.0   2025-03-06 [2] CRAN (R 4.5.0)
    #>  bit64                  4.6.0-1 2025-01-16 [2] CRAN (R 4.5.0)
    #>  blob                   1.2.4   2023-03-17 [2] CRAN (R 4.5.0)
    #>  bookdown               0.43    2025-04-15 [2] CRAN (R 4.5.0)
    #>  bslib                  0.9.0   2025-01-30 [2] CRAN (R 4.5.0)
    #>  cachem                 1.1.0   2024-05-16 [2] CRAN (R 4.5.0)
    #>  circlize               0.4.16  2024-02-20 [2] CRAN (R 4.5.0)
    #>  cli                    3.6.4   2025-02-13 [2] CRAN (R 4.5.0)
    #>  clue                   0.3-66  2024-11-13 [2] CRAN (R 4.5.0)
    #>  cluster                2.1.8.1 2025-03-12 [2] CRAN (R 4.5.0)
    #>  codetools              0.2-20  2024-03-31 [2] CRAN (R 4.5.0)
    #>  colorspace             2.1-1   2024-07-26 [2] CRAN (R 4.5.0)
    #>  colourpicker           1.3.0   2023-08-21 [2] CRAN (R 4.5.0)
    #>  ComplexHeatmap         2.24.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  cowplot                1.1.3   2024-01-22 [2] CRAN (R 4.5.0)
    #>  crayon                 1.5.3   2024-06-20 [2] CRAN (R 4.5.0)
    #>  data.table             1.17.0  2025-02-22 [2] CRAN (R 4.5.0)
    #>  DBI                    1.2.3   2024-06-02 [2] CRAN (R 4.5.0)
    #>  DelayedArray           0.34.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  digest                 0.6.37  2024-08-19 [2] CRAN (R 4.5.0)
    #>  doParallel             1.0.17  2022-02-07 [2] CRAN (R 4.5.0)
    #>  dplyr                  1.1.4   2023-11-17 [2] CRAN (R 4.5.0)
    #>  DT                     0.33    2024-04-04 [2] CRAN (R 4.5.0)
    #>  evaluate               1.0.3   2025-01-10 [2] CRAN (R 4.5.0)
    #>  fastmap                1.2.0   2024-05-15 [2] CRAN (R 4.5.0)
    #>  fastmatch              1.1-6   2024-12-23 [2] CRAN (R 4.5.0)
    #>  fgsea                * 1.34.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  fontawesome            0.5.3   2024-11-16 [2] CRAN (R 4.5.0)
    #>  foreach                1.5.2   2022-02-02 [2] CRAN (R 4.5.0)
    #>  generics             * 0.1.3   2022-07-05 [2] CRAN (R 4.5.0)
    #>  GenomeInfoDb         * 1.44.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  GenomeInfoDbData       1.2.14  2025-04-10 [2] Bioconductor
    #>  GenomicRanges        * 1.60.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  GetoptLong             1.0.5   2020-12-15 [2] CRAN (R 4.5.0)
    #>  ggplot2                3.5.2   2025-04-09 [2] CRAN (R 4.5.0)
    #>  ggrepel                0.9.6   2024-09-07 [2] CRAN (R 4.5.0)
    #>  GlobalOptions          0.1.2   2020-06-10 [2] CRAN (R 4.5.0)
    #>  glue                   1.8.0   2024-09-30 [2] CRAN (R 4.5.0)
    #>  GO.db                * 3.21.0  2025-04-10 [2] Bioconductor
    #>  gtable                 0.3.6   2024-10-25 [2] CRAN (R 4.5.0)
    #>  htmltools              0.5.8.1 2024-04-04 [2] CRAN (R 4.5.0)
    #>  htmlwidgets            1.6.4   2023-12-06 [2] CRAN (R 4.5.0)
    #>  httpuv                 1.6.15  2024-03-26 [2] CRAN (R 4.5.0)
    #>  httr                   1.4.7   2023-08-15 [2] CRAN (R 4.5.0)
    #>  igraph                 2.1.4   2025-01-23 [2] CRAN (R 4.5.0)
    #>  IRanges              * 2.42.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  iSEE                 * 2.20.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  iSEEpathways         * 1.6.0   2025-04-15 [1] Bioconductor 3.21 (R 4.5.0)
    #>  iterators              1.0.14  2022-02-05 [2] CRAN (R 4.5.0)
    #>  jquerylib              0.1.4   2021-04-26 [2] CRAN (R 4.5.0)
    #>  jsonlite               2.0.0   2025-03-27 [2] CRAN (R 4.5.0)
    #>  KEGGREST               1.48.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  knitr                  1.50    2025-03-16 [2] CRAN (R 4.5.0)
    #>  later                  1.4.2   2025-04-08 [2] CRAN (R 4.5.0)
    #>  lattice                0.22-7  2025-04-02 [2] CRAN (R 4.5.0)
    #>  lifecycle              1.0.4   2023-11-07 [2] CRAN (R 4.5.0)
    #>  listviewer             4.0.0   2023-09-30 [2] CRAN (R 4.5.0)
    #>  lubridate              1.9.4   2024-12-08 [2] CRAN (R 4.5.0)
    #>  magrittr               2.0.3   2022-03-30 [2] CRAN (R 4.5.0)
    #>  Matrix                 1.7-3   2025-03-11 [2] CRAN (R 4.5.0)
    #>  MatrixGenerics       * 1.20.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  matrixStats          * 1.5.0   2025-01-07 [2] CRAN (R 4.5.0)
    #>  memoise                2.0.1   2021-11-26 [2] CRAN (R 4.5.0)
    #>  mgcv                   1.9-3   2025-04-04 [2] CRAN (R 4.5.0)
    #>  mime                   0.13    2025-03-17 [2] CRAN (R 4.5.0)
    #>  miniUI                 0.1.1.1 2018-05-18 [2] CRAN (R 4.5.0)
    #>  munsell                0.5.1   2024-04-01 [2] CRAN (R 4.5.0)
    #>  nlme                   3.1-168 2025-03-31 [2] CRAN (R 4.5.0)
    #>  org.Hs.eg.db         * 3.21.0  2025-04-10 [2] Bioconductor
    #>  pillar                 1.10.2  2025-04-05 [2] CRAN (R 4.5.0)
    #>  pkgconfig              2.0.3   2019-09-22 [2] CRAN (R 4.5.0)
    #>  plyr                   1.8.9   2023-10-02 [2] CRAN (R 4.5.0)
    #>  png                    0.1-8   2022-11-29 [2] CRAN (R 4.5.0)
    #>  promises               1.3.2   2024-11-28 [2] CRAN (R 4.5.0)
    #>  R6                     2.6.1   2025-02-15 [2] CRAN (R 4.5.0)
    #>  RColorBrewer           1.1-3   2022-04-03 [2] CRAN (R 4.5.0)
    #>  Rcpp                   1.0.14  2025-01-12 [2] CRAN (R 4.5.0)
    #>  RefManageR           * 1.4.0   2022-09-30 [2] CRAN (R 4.5.0)
    #>  rintrojs               0.3.4   2024-01-11 [2] CRAN (R 4.5.0)
    #>  rjson                  0.2.23  2024-09-16 [2] CRAN (R 4.5.0)
    #>  rlang                  1.1.6   2025-04-11 [2] CRAN (R 4.5.0)
    #>  rmarkdown              2.29    2024-11-04 [2] CRAN (R 4.5.0)
    #>  RSQLite                2.3.9   2024-12-03 [2] CRAN (R 4.5.0)
    #>  S4Arrays               1.8.0   2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  S4Vectors            * 0.46.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  sass                   0.4.10  2025-04-11 [2] CRAN (R 4.5.0)
    #>  scales                 1.3.0   2023-11-28 [2] CRAN (R 4.5.0)
    #>  sessioninfo          * 1.2.3   2025-02-05 [2] CRAN (R 4.5.0)
    #>  shape                  1.4.6.1 2024-02-23 [2] CRAN (R 4.5.0)
    #>  shiny                * 1.10.0  2024-12-14 [2] CRAN (R 4.5.0)
    #>  shinyAce               0.4.4   2025-02-03 [2] CRAN (R 4.5.0)
    #>  shinydashboard         0.7.2   2021-09-30 [2] CRAN (R 4.5.0)
    #>  shinyjs                2.1.0   2021-12-23 [2] CRAN (R 4.5.0)
    #>  shinyWidgets           0.9.0   2025-02-21 [2] CRAN (R 4.5.0)
    #>  SingleCellExperiment * 1.30.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  SparseArray            1.8.0   2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  stringi                1.8.7   2025-03-27 [2] CRAN (R 4.5.0)
    #>  stringr                1.5.1   2023-11-14 [2] CRAN (R 4.5.0)
    #>  SummarizedExperiment * 1.38.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  tibble                 3.2.1   2023-03-20 [2] CRAN (R 4.5.0)
    #>  tidyselect             1.2.1   2024-03-11 [2] CRAN (R 4.5.0)
    #>  timechange             0.3.0   2024-01-18 [2] CRAN (R 4.5.0)
    #>  UCSC.utils             1.4.0   2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  vctrs                  0.6.5   2023-12-01 [2] CRAN (R 4.5.0)
    #>  vipor                  0.4.7   2023-12-18 [2] CRAN (R 4.5.0)
    #>  viridisLite            0.4.2   2023-05-02 [2] CRAN (R 4.5.0)
    #>  xfun                   0.52    2025-04-02 [2] CRAN (R 4.5.0)
    #>  xml2                   1.3.8   2025-03-14 [2] CRAN (R 4.5.0)
    #>  xtable                 1.8-4   2019-04-21 [2] CRAN (R 4.5.0)
    #>  XVector                0.48.0  2025-04-15 [2] Bioconductor 3.21 (R 4.5.0)
    #>  yaml                   2.3.10  2024-07-26 [2] CRAN (R 4.5.0)
    #>
    #>  [1] /private/var/folders/r0/l4fjk6cj5xj0j3brt4bplpl40000gt/T/RtmpgG2q7U/Rinst37f6673e9696
    #>  [2] /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/library
    #>  * ── Packages attached to the search path.
    #>
    #> ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

# 4 Bibliography

This vignette was generated using BiocStyle (Oleś, 2025) with knitr (Xie, 2025) 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.29. 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.36.0. 2025. 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, 2025. 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.6.0. 2025. DOI: 10.18129/B9.bioc.iSEEpathways. URL: https://bioconductor.org/packages/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.3. 2025. DOI: 10.32614/CRAN.package.sessioninfo. URL: https://CRAN.R-project.org/package=sessioninfo.

[8] Y. Xie. knitr: A General-Purpose Package for Dynamic Report Generation in R. R package version 1.50. 2025. URL: https://yihui.org/knitr/.