The EMMA User’s Guide - Enrichment Method MAtters

Introduction

Functional Enrichment Analysis (FEA) is a key downstream step in omics workflows, commonly applied after differential expression analysis to support biological interpretation and generate pathway-level hypotheses. A wide range of tools and methods are available, mainly Over-Representation Analysis (ORA) (Khatri et al. 2012) and Gene Set Enrichment Analysis (GSEA) (Subramanian et al. 2005), leading to substantial heterogeneity in analytical choices and reported results.

Despite its widespread use, FEA is often insufficiently documented (Wijesooriya et al. 2022). Critical parameters such as background gene sets or multiple testing correction methods are frequently missing or inconsistently reported in scientific papers, limiting reproducibility and interpretability. Currently, no standardized framework exists to ensure transparent and reproducible documentation of FEA workflows, comparable to the MIAME guidelines (Brazma et al. 2001).

Similar approaches have been developed outside the Bioconductor ecosystem to improve transparency and reproducibility in other analytical contexts. For example, tidylog records operations performed with dplyr and tidyr, while omicslog tracks transformations applied to omics-oriented objects. However, no tool specifically addresses the metadata and provenance requirements of FEA workflows.

To address this gap, we introduce EMMA (standing for Enrichment Methods MAtters), a framework that automatically captures key analytical parameters and provenance information during the execution of FEA methods.

This vignette demonstrates how EMMA integrates with existing tools (e.g. clusterProfiler, topGO, Enrichr, gprofiler2) to execute enrichment analyses while systematically capturing analysis parameters and provenance information during runtime, returning enrichment results without altering their original format, alongside structured and reusable metadata.

What do you get with EMMA?

Using EMMA allows you to:

  • Record the exact function call and parameters used for FEA
  • Automatically track annotation sources (e.g. organism, gene set database)
  • Retain provenance directly within the results object
  • Generate reproducible summaries of the analysis (e.g. Methods sections)
  • Facilitate sharing of results together with their analysis context

How does EMMA work?

EMMA works by wrapping an enrichment call, executing it, and capturing relevant provenance information and parameters during runtime. The recorded metadata is then attached directly to the result object using R’s attribute system.

This approach enables EMMA to preserve provenance information without modifying the original result structure or introducing new classes, allowing users to continue working seamlessly with standard outputs from existing tools.

While Bioconductor provides dedicated metadata slots for certain S4 classes (e.g. via metadata()), these are not consistently available across all enrichment result types. By relying on attributes, provenance information can be attached to any result object regardless of its underlying class.

Installation

To install this package, start R and enter:

if (!requireNamespace("BiocManager", quietly = TRUE)) {
  install.packages("BiocManager")}

BiocManager::install("EMMA")

Once installed, the package can be loaded and attached to the current workspace as follows:

library("EMMA")

Usage example of EMMA: the macrophage dataset

About the data

In the remainder of this vignette, we will illustrate the main features of EMMA on a publicly available dataset from Alasoo, et al. “Shared genetic effects on chromatin and gene expression indicate a role for enhancer priming in immune response”, published in Nature Genetics, January 2018 (Alasoo et al. 2018).

The data is made available via the macrophage Bioconductor package, which contains the files output from the Salmon quantification (version 0.12.0, with GENCODE v29 reference), as well as the values summarized at the gene level, which we will use to exemplify.

In the macrophage experimental setting, the samples are available from 6 different donors, in 4 different conditions (naive, treated with Interferon gamma, with SL1344, or with a combination of Interferon gamma and SL1344).

Let’s start by loading all the necessary packages:

library("EMMA")

library("macrophage")
library("DESeq2")
library("org.Hs.eg.db")
library("clusterProfiler")
library("mosdef")
library("topGO")
library("GO.db")

We will show an example of how EMMA fits into a regular bulk RNA-seq data analysis workflow.

Getting a list of Differentially Expressed Genes

For this, we will load the macrophage data and perform Differential Expression Analysis with DESeq2

# load data
data(gse, package = "macrophage")
# set up design
dds_macrophage <- DESeqDataSet(gse, design = ~ line + condition)
# preprocess
rownames(dds_macrophage) <- substr(rownames(dds_macrophage), 1, 15)
keep <- rowSums(counts(dds_macrophage) >= 10) >= 6
dds_macrophage <- dds_macrophage[keep, ]

# set seed for reproducibility
set.seed(2711)
# sample randomly for 2k genes
selected_genes <- sample(rownames(dds_macrophage), 2000)

dds_macrophage <- dds_macrophage[selected_genes, ]

# run DESeq
dds_macrophage <- DESeq(dds_macrophage)

# get de res for 1st contrast
IFNg_vs_naive <- results(dds_macrophage,
                         contrast = c("condition", "IFNg", "naive"),
                         lfcThreshold = 1, alpha = 0.05)
IFNg_vs_naive <- lfcShrink(dds_macrophage, coef = "condition_IFNg_vs_naive",
                           res = IFNg_vs_naive,
                           type = "apeglm")
IFNg_vs_naive$SYMBOL <- rowData(dds_macrophage)$SYMBOL

# get de res for 2st contrast
SL1344_vs_naive <- results(dds_macrophage,
                         contrast = c("condition", "SL1344", "naive"),
                         lfcThreshold = 1, alpha = 0.05)
SL1344_vs_naive <- lfcShrink(dds_macrophage, coef = "condition_SL1344_vs_naive",
                           res = SL1344_vs_naive,
                           type = "apeglm")
SL1344_vs_naive$SYMBOL <- rowData(dds_macrophage)$SYMBOL

# sort by adjusted p value
de_list <- list(
  IFNg_vs_naive = IFNg_vs_naive,
  SL1344_vs_naive = SL1344_vs_naive
)

de_list <- lapply(de_list, function(df) {
  df <- df[order(df$padj), ]
  df <- df[!is.na(df$padj) & df$padj <= 0.05, ]
  df
})
# set background gene list
gene_universe <- rownames(dds_macrophage)

Performing Functional Enrichment Analysis (FEA)

Now that we have a list of DE genes for this contrast, we can perform Functional Enrichment Analysis.
We do this first without the functionality provided by EMMA.

In the following example, we will use the function enrichGO() from clusterProfiler

de_res <- de_list$IFNg_vs_naive

fea_res <- enrichGO(gene = rownames(de_res),
                    universe = gene_universe,
                    keyType = "ENSEMBL",
                    OrgDb = org.Hs.eg.db,
                    ont = "BP",
                    pAdjustMethod = "BH",
                    pvalueCutoff = 0.05,
                    qvalueCutoff = 0.1)

Entering the EMMA framework

From now on, we will complement the existing workflow with the functionality provided by EMMA.

EMMA_run(): Capturing the recorded information

EMMA_run() accepts a function call (e.g. enrichGO(...)) and executes it as it is, while capturing the associated parameters and provenance information:

# perform FEA, but with EMMA!
fea_res <- enrichGO(gene = rownames(de_res),
                    universe = gene_universe,
                    keyType = "ENSEMBL",
                    OrgDb = org.Hs.eg.db,
                    ont = "BP",
                    pAdjustMethod = "BH",
                    pvalueCutoff = 0.05,
                    qvalueCutoff = 0.1) |> 
  EMMA_run() # simply pipe your call to EMMA_run()
# check res
fea_res
#> #
#> # over-representation test
#> #
#> #...@organism     Homo sapiens 
#> #...@ontology     BP 
#> #...@keytype      ENTREZID 
#> #...@gene     chr [1:103] "51778" "387751" "10537" "7453" "972" "441168" "2635" "80380" ...
#> #...pvalues adjusted by 'BH' with cutoff < 0.05
#> #...67 enriched terms found
#> 'data.frame':    67 obs. of  12 variables:
#>  $ ID            : chr  "GO:0006955" "GO:0002376" "GO:0009607" "GO:0002250" ...
#>  $ Description   : chr  "immune response" "immune system process" "response to biotic stimulus" "adaptive immune response" ...
#>  $ GeneRatio     : chr  "29/80" "31/80" "24/80" "12/80" ...
#>  $ BgRatio       : chr  "157/1447" "224/1447" "145/1447" "39/1447" ...
#>  $ RichFactor    : num  0.185 0.138 0.166 0.308 0.152 ...
#>  $ FoldEnrichment: num  3.34 2.5 2.99 5.57 2.75 ...
#>  $ zScore        : num  7.51 5.92 6.12 6.99 5.63 ...
#>  $ pvalue        : num  4.14e-10 1.52e-07 2.18e-07 4.17e-07 1.18e-06 ...
#>  $ p.adjust      : num  5.90e-07 1.03e-04 1.03e-04 1.48e-04 3.08e-04 ...
#>  $ qvalue        : num  5.90e-07 1.03e-04 1.03e-04 1.48e-04 3.08e-04 ...
#>  $ geneID        : chr  "ENSG00000090339/ENSG00000275718/ENSG00000204616/ENSG00000161217/ENSG00000213886/ENSG00000115415/ENSG00000117226"| __truncated__ "ENSG00000090339/ENSG00000275718/ENSG00000204616/ENSG00000161217/ENSG00000213886/ENSG00000115415/ENSG00000162367"| __truncated__ "ENSG00000275718/ENSG00000204616/ENSG00000213886/ENSG00000115415/ENSG00000117226/ENSG00000101412/ENSG00000100368"| __truncated__ "ENSG00000161217/ENSG00000116514/ENSG00000081985/ENSG00000100368/ENSG00000019582/ENSG00000234745/ENSG00000197646"| __truncated__ ...
#>  $ Count         : int  29 31 24 12 24 10 22 22 17 13 ...
#> #...Citation
#> S Xu, E Hu, Y Cai, Z Xie, X Luo, L Zhan, W Tang, Q Wang, B Liu, R Wang, W Xie, T Wu, L Xie, G Yu. Using clusterProfiler to characterize multiomics data. Nature Protocols. 2024, 19(11):3292-3320

… or you can simply wrap EMMA_run() around your call:

# you can also pass the function name and its namespace
# e.g. `clusterProfiler::enrichGO(...)`
fea_res_nobg <- EMMA_run(
  clusterProfiler::enrichGO(
    # no universe set
    gene = rownames(de_res),
    keyType = "ENSEMBL",
    OrgDb = org.Hs.eg.db,
    ont = "BP",
    pAdjustMethod = "BH",
    pvalueCutoff = 0.05,
    qvalueCutoff = 0.1,
    readable = TRUE
  )
)

As you can see, EMMA returns the FEA results in their native/standard format. EMMA also warns you about good practices when performing FEA, like in this example, we didn’t define a list of background genes (which can influence the results leading e.g. to a larger amount of false discoveries, as a consequence of over-optimistic smaller p-values (Wijesooriya et al. 2022)), so we get warned about that.

EMMA_show(): Summarizing the recorded information

To get a quick summary of what EMMA captured while we ran the analysis, we use EMMA_show():

EMMA_show(fea_res)
#> Number of Pathways: 67 
#> Call: enrichGO(gene = rownames(de_res), universe = gene_universe, keyType = "ENSEMBL",      OrgDb = org.Hs.eg.db, ont = "BP", pAdjustMethod = "BH", pvalueCutoff = 0.05,      qvalueCutoff = 0.1)  
#> Wrapper: FALSE  
#> Package: clusterProfiler v. 4.21.0  
#> Organism: Homo sapiens  
#> Gene set library: GO  
#> Gene set library version: 3.23.1

EMMA attaches the captured metadata to the attributes of the results object. That’s why it is always a good practice to save the original results, and not only the subsets of interest.

EMMA_get_record(): Retrieving the recorded information

To access the full recorded information, we use EMMA_get_record():

emma_record <- EMMA_get_record(fea_res)

# get all the record
emma_record
#> $method
#> $method$call
#> enrichGO(gene = rownames(de_res), universe = gene_universe, keyType = "ENSEMBL", 
#>     OrgDb = org.Hs.eg.db, ont = "BP", pAdjustMethod = "BH", pvalueCutoff = 0.05, 
#>     qvalueCutoff = 0.1)
#> 
#> $method$function_name
#> [1] "enrichGO"
#> 
#> $method$package_name
#> [1] "clusterProfiler"
#> 
#> $method$package_version
#> [1] "4.21.0"
#> 
#> $method$wrapped_function
#> NULL
#> 
#> $method$wrapped_package
#> NULL
#> 
#> $method$wrapper
#> [1] FALSE
#> 
#> 
#> $input
#> $input$arguments
#> $input$arguments$gene
#>   [1] "ENSG00000172399" "ENSG00000225492" "ENSG00000254838" "ENSG00000213886"
#>   [5] "ENSG00000140105" "ENSG00000019582" "ENSG00000188820" "ENSG00000117226"
#>   [9] "ENSG00000197646" "ENSG00000234745" "ENSG00000139597" "ENSG00000159363"
#>  [13] "ENSG00000206341" "ENSG00000090539" "ENSG00000180616" "ENSG00000206503"
#>  [17] "ENSG00000144649" "ENSG00000115415" "ENSG00000110665" "ENSG00000013374"
#>  [21] "ENSG00000137193" "ENSG00000121270" "ENSG00000165949" "ENSG00000070915"
#>  [25] "ENSG00000007968" "ENSG00000142621" "ENSG00000236567" "ENSG00000237988"
#>  [29] "ENSG00000101412" "ENSG00000068079" "ENSG00000114127" "ENSG00000270120"
#>  [33] "ENSG00000090339" "ENSG00000079156" "ENSG00000074660" "ENSG00000103154"
#>  [37] "ENSG00000205846" "ENSG00000275718" "ENSG00000185499" "ENSG00000172738"
#>  [41] "ENSG00000157551" "ENSG00000255491" "ENSG00000188389" "ENSG00000251230"
#>  [45] "ENSG00000093009" "ENSG00000225864" "ENSG00000162367" "ENSG00000100368"
#>  [49] "ENSG00000165935" "ENSG00000116016" "ENSG00000116514" "ENSG00000285761"
#>  [53] "ENSG00000085999" "ENSG00000274461" "ENSG00000058335" "ENSG00000164125"
#>  [57] "ENSG00000104894" "ENSG00000177465" "ENSG00000105639" "ENSG00000144837"
#>  [61] "ENSG00000109756" "ENSG00000276411" "ENSG00000144136" "ENSG00000081985"
#>  [65] "ENSG00000148429" "ENSG00000124508" "ENSG00000152939" "ENSG00000100985"
#>  [69] "ENSG00000164292" "ENSG00000161217" "ENSG00000256713" "ENSG00000145362"
#>  [73] "ENSG00000155287" "ENSG00000214826" "ENSG00000155324" "ENSG00000137628"
#>  [77] "ENSG00000083097" "ENSG00000204616" "ENSG00000120262" "ENSG00000185433"
#>  [81] "ENSG00000092345" "ENSG00000070501" "ENSG00000169891" "ENSG00000154783"
#>  [85] "ENSG00000157827" "ENSG00000230521" "ENSG00000125355" "ENSG00000075240"
#>  [89] "ENSG00000163958" "ENSG00000250240" "ENSG00000156273" "ENSG00000186815"
#>  [93] "ENSG00000280649" "ENSG00000050767" "ENSG00000125900" "ENSG00000186854"
#>  [97] "ENSG00000077152" "ENSG00000198719" "ENSG00000227463" "ENSG00000123485"
#> [101] "ENSG00000175445" "ENSG00000154920" "ENSG00000141086" "ENSG00000203446"
#> [105] "ENSG00000138496" "ENSG00000163421" "ENSG00000075618" "ENSG00000112149"
#> 
#> $input$arguments$universe
#>    [1] "ENSG00000206341" "ENSG00000255491" "ENSG00000159348" "ENSG00000103064"
#>    [5] "ENSG00000105447" "ENSG00000109956" "ENSG00000261613" "ENSG00000167508"
#>    [9] "ENSG00000235385" "ENSG00000125449" "ENSG00000015153" "ENSG00000104369"
#>   [13] "ENSG00000180155" "ENSG00000185158" "ENSG00000182307" "ENSG00000135776"
#>   [17] "ENSG00000078061" "ENSG00000105849" "ENSG00000127946" "ENSG00000285159"
#>   [21] "ENSG00000169762" "ENSG00000196152" "ENSG00000162910" "ENSG00000127995"
#>   [25] "ENSG00000149294" "ENSG00000255857" "ENSG00000156052" "ENSG00000078804"
#>   [29] "ENSG00000242193" "ENSG00000168646" "ENSG00000117152" "ENSG00000274272"
#>   [33] "ENSG00000164266" "ENSG00000177728" "ENSG00000266967" "ENSG00000102901"
#>   [37] "ENSG00000259972" "ENSG00000260948" "ENSG00000168303" "ENSG00000243679"
#>   [41] "ENSG00000105426" "ENSG00000101412" "ENSG00000107611" "ENSG00000284292"
#>   [45] "ENSG00000186891" "ENSG00000149591" "ENSG00000196812" "ENSG00000260899"
#>   [49] "ENSG00000180626" "ENSG00000280649" "ENSG00000130226" "ENSG00000198551"
#>   [53] "ENSG00000075914" "ENSG00000229664" "ENSG00000179456" "ENSG00000272447"
#>   [57] "ENSG00000225697" "ENSG00000270012" "ENSG00000183763" "ENSG00000095951"
#>   [61] "ENSG00000258754" "ENSG00000147573" "ENSG00000266904" "ENSG00000105325"
#>   [65] "ENSG00000175606" "ENSG00000140750" "ENSG00000100600" "ENSG00000131236"
#>   [69] "ENSG00000142731" "ENSG00000105698" "ENSG00000125846" "ENSG00000171204"
#>   [73] "ENSG00000170955" "ENSG00000280173" "ENSG00000113810" "ENSG00000189266"
#>   [77] "ENSG00000284707" "ENSG00000176222" "ENSG00000159720" "ENSG00000149968"
#>   [81] "ENSG00000236990" "ENSG00000088205" "ENSG00000158828" "ENSG00000145817"
#>   [85] "ENSG00000176714" "ENSG00000066382" "ENSG00000169951" "ENSG00000144034"
#>   [89] "ENSG00000279821" "ENSG00000106100" "ENSG00000284428" "ENSG00000197857"
#>   [93] "ENSG00000258824" "ENSG00000100288" "ENSG00000160445" "ENSG00000081181"
#>   [97] "ENSG00000171017" "ENSG00000169242" "ENSG00000261183" "ENSG00000115526"
#>  [101] "ENSG00000174442" "ENSG00000185697" "ENSG00000283503" "ENSG00000228903"
#>  [105] "ENSG00000257949" "ENSG00000135624" "ENSG00000173267" "ENSG00000116032"
#>  [109] "ENSG00000162620" "ENSG00000180667" "ENSG00000130803" "ENSG00000214708"
#>  [113] "ENSG00000145794" "ENSG00000104894" "ENSG00000164687" "ENSG00000154511"
#>  [117] "ENSG00000247627" "ENSG00000219545" "ENSG00000260072" "ENSG00000263766"
#>  [121] "ENSG00000132846" "ENSG00000174080" "ENSG00000162490" "ENSG00000242485"
#>  [125] "ENSG00000100416" "ENSG00000124593" "ENSG00000273759" "ENSG00000125633"
#>  [129] "ENSG00000100739" "ENSG00000186073" "ENSG00000164610" "ENSG00000165694"
#>  [133] "ENSG00000206503" "ENSG00000166664" "ENSG00000264151" "ENSG00000125124"
#>  [137] "ENSG00000111732" "ENSG00000105357" "ENSG00000054392" "ENSG00000059122"
#>  [141] "ENSG00000135766" "ENSG00000130005" "ENSG00000153130" "ENSG00000244491"
#>  [145] "ENSG00000198873" "ENSG00000164305" "ENSG00000128016" "ENSG00000106258"
#>  [149] "ENSG00000258909" "ENSG00000198677" "ENSG00000140284" "ENSG00000181264"
#>  [153] "ENSG00000176531" "ENSG00000084652" "ENSG00000157379" "ENSG00000275700"
#>  [157] "ENSG00000164327" "ENSG00000099364" "ENSG00000183426" "ENSG00000174125"
#>  [161] "ENSG00000230487" "ENSG00000057704" "ENSG00000185591" "ENSG00000125898"
#>  [165] "ENSG00000267655" "ENSG00000110811" "ENSG00000139117" "ENSG00000070915"
#>  [169] "ENSG00000179526" "ENSG00000146373" "ENSG00000139211" "ENSG00000158555"
#>  [173] "ENSG00000101138" "ENSG00000104904" "ENSG00000198720" "ENSG00000166133"
#>  [177] "ENSG00000224950" "ENSG00000172878" "ENSG00000145358" "ENSG00000116688"
#>  [181] "ENSG00000113658" "ENSG00000169372" "ENSG00000175087" "ENSG00000103154"
#>  [185] "ENSG00000273311" "ENSG00000187626" "ENSG00000144218" "ENSG00000230651"
#>  [189] "ENSG00000169972" "ENSG00000149809" "ENSG00000138080" "ENSG00000104320"
#>  [193] "ENSG00000243789" "ENSG00000152455" "ENSG00000197162" "ENSG00000177042"
#>  [197] "ENSG00000136108" "ENSG00000179832" "ENSG00000154783" "ENSG00000251322"
#>  [201] "ENSG00000255439" "ENSG00000163636" "ENSG00000138768" "ENSG00000257921"
#>  [205] "ENSG00000183751" "ENSG00000137203" "ENSG00000138696" "ENSG00000235823"
#>  [209] "ENSG00000177830" "ENSG00000099139" "ENSG00000115486" "ENSG00000143164"
#>  [213] "ENSG00000153015" "ENSG00000258860" "ENSG00000147650" "ENSG00000167323"
#>  [217] "ENSG00000196757" "ENSG00000143479" "ENSG00000168264" "ENSG00000154640"
#>  [221] "ENSG00000121774" "ENSG00000093100" "ENSG00000184988" "ENSG00000164953"
#>  [225] "ENSG00000277476" "ENSG00000141425" "ENSG00000049449" "ENSG00000149050"
#>  [229] "ENSG00000280594" "ENSG00000174943" "ENSG00000197969" "ENSG00000158417"
#>  [233] "ENSG00000076554" "ENSG00000163346" "ENSG00000120949" "ENSG00000187800"
#>  [237] "ENSG00000059758" "ENSG00000125388" "ENSG00000232164" "ENSG00000077152"
#>  [241] "ENSG00000198960" "ENSG00000259004" "ENSG00000125454" "ENSG00000139793"
#>  [245] "ENSG00000234906" "ENSG00000245648" "ENSG00000164654" "ENSG00000144406"
#>  [249] "ENSG00000139613" "ENSG00000234857" "ENSG00000187953" "ENSG00000135407"
#>  [253] "ENSG00000119673" "ENSG00000249846" "ENSG00000128656" "ENSG00000079156"
#>  [257] "ENSG00000198315" "ENSG00000141543" "ENSG00000035499" "ENSG00000206562"
#>  [261] "ENSG00000136319" "ENSG00000175040" "ENSG00000136536" "ENSG00000226180"
#>  [265] "ENSG00000144583" "ENSG00000120306" "ENSG00000256806" "ENSG00000197321"
#>  [269] "ENSG00000125149" "ENSG00000196236" "ENSG00000102096" "ENSG00000165689"
#>  [273] "ENSG00000178718" "ENSG00000276334" "ENSG00000113578" "ENSG00000105993"
#>  [277] "ENSG00000057608" "ENSG00000283761" "ENSG00000171940" "ENSG00000115687"
#>  [281] "ENSG00000280968" "ENSG00000123485" "ENSG00000235859" "ENSG00000073169"
#>  [285] "ENSG00000229582" "ENSG00000184922" "ENSG00000164414" "ENSG00000177030"
#>  [289] "ENSG00000142794" "ENSG00000152465" "ENSG00000196689" "ENSG00000148290"
#>  [293] "ENSG00000177352" "ENSG00000177951" "ENSG00000005448" "ENSG00000188177"
#>  [297] "ENSG00000227463" "ENSG00000087077" "ENSG00000260822" "ENSG00000130787"
#>  [301] "ENSG00000196388" "ENSG00000258940" "ENSG00000147027" "ENSG00000125551"
#>  [305] "ENSG00000172663" "ENSG00000129646" "ENSG00000152332" "ENSG00000121270"
#>  [309] "ENSG00000261659" "ENSG00000177707" "ENSG00000106733" "ENSG00000102796"
#>  [313] "ENSG00000229953" "ENSG00000197063" "ENSG00000111215" "ENSG00000155970"
#>  [317] "ENSG00000170370" "ENSG00000204388" "ENSG00000063761" "ENSG00000239969"
#>  [321] "ENSG00000072062" "ENSG00000133488" "ENSG00000125084" "ENSG00000285596"
#>  [325] "ENSG00000163453" "ENSG00000105697" "ENSG00000105819" "ENSG00000117143"
#>  [329] "ENSG00000213443" "ENSG00000197024" "ENSG00000174652" "ENSG00000266698"
#>  [333] "ENSG00000184489" "ENSG00000131023" "ENSG00000095066" "ENSG00000163421"
#>  [337] "ENSG00000062370" "ENSG00000260269" "ENSG00000108256" "ENSG00000170469"
#>  [341] "ENSG00000214063" "ENSG00000173757" "ENSG00000101473" "ENSG00000107882"
#>  [345] "ENSG00000163888" "ENSG00000197614" "ENSG00000227733" "ENSG00000101843"
#>  [349] "ENSG00000185252" "ENSG00000155926" "ENSG00000111679" "ENSG00000114107"
#>  [353] "ENSG00000234362" "ENSG00000164125" "ENSG00000136802" "ENSG00000197444"
#>  [357] "ENSG00000227376" "ENSG00000105854" "ENSG00000175198" "ENSG00000165494"
#>  [361] "ENSG00000279020" "ENSG00000117614" "ENSG00000159086" "ENSG00000078070"
#>  [365] "ENSG00000148429" "ENSG00000280213" "ENSG00000227066" "ENSG00000279846"
#>  [369] "ENSG00000090060" "ENSG00000198369" "ENSG00000198612" "ENSG00000143127"
#>  [373] "ENSG00000237441" "ENSG00000128408" "ENSG00000213904" "ENSG00000116514"
#>  [377] "ENSG00000164692" "ENSG00000246560" "ENSG00000128596" "ENSG00000189157"
#>  [381] "ENSG00000101079" "ENSG00000175497" "ENSG00000183323" "ENSG00000008324"
#>  [385] "ENSG00000196220" "ENSG00000071859" "ENSG00000050748" "ENSG00000139239"
#>  [389] "ENSG00000173991" "ENSG00000157916" "ENSG00000141076" "ENSG00000162980"
#>  [393] "ENSG00000082212" "ENSG00000203326" "ENSG00000087338" "ENSG00000130032"
#>  [397] "ENSG00000254910" "ENSG00000119227" "ENSG00000164347" "ENSG00000198729"
#>  [401] "ENSG00000099204" "ENSG00000272807" "ENSG00000271913" "ENSG00000204713"
#>  [405] "ENSG00000197070" "ENSG00000069020" "ENSG00000167889" "ENSG00000143811"
#>  [409] "ENSG00000078668" "ENSG00000231365" "ENSG00000280330" "ENSG00000257390"
#>  [413] "ENSG00000185222" "ENSG00000125827" "ENSG00000125355" "ENSG00000169813"
#>  [417] "ENSG00000109929" "ENSG00000047230" "ENSG00000105639" "ENSG00000166575"
#>  [421] "ENSG00000261116" "ENSG00000112855" "ENSG00000134709" "ENSG00000071054"
#>  [425] "ENSG00000094755" "ENSG00000131196" "ENSG00000230461" "ENSG00000196976"
#>  [429] "ENSG00000177311" "ENSG00000158615" "ENSG00000251664" "ENSG00000151208"
#>  [433] "ENSG00000255031" "ENSG00000022976" "ENSG00000175779" "ENSG00000173114"
#>  [437] "ENSG00000069849" "ENSG00000003147" "ENSG00000215256" "ENSG00000250320"
#>  [441] "ENSG00000137628" "ENSG00000100749" "ENSG00000174775" "ENSG00000165197"
#>  [445] "ENSG00000174231" "ENSG00000175792" "ENSG00000203485" "ENSG00000256940"
#>  [449] "ENSG00000226891" "ENSG00000265479" "ENSG00000280327" "ENSG00000196363"
#>  [453] "ENSG00000109063" "ENSG00000145779" "ENSG00000099810" "ENSG00000172534"
#>  [457] "ENSG00000187837" "ENSG00000168803" "ENSG00000239665" "ENSG00000132406"
#>  [461] "ENSG00000130283" "ENSG00000122783" "ENSG00000250616" "ENSG00000146410"
#>  [465] "ENSG00000232445" "ENSG00000145335" "ENSG00000081985" "ENSG00000184545"
#>  [469] "ENSG00000196369" "ENSG00000214021" "ENSG00000072840" "ENSG00000215769"
#>  [473] "ENSG00000272079" "ENSG00000204681" "ENSG00000047597" "ENSG00000136021"
#>  [477] "ENSG00000130772" "ENSG00000231889" "ENSG00000141314" "ENSG00000139636"
#>  [481] "ENSG00000140538" "ENSG00000270276" "ENSG00000187535" "ENSG00000285458"
#>  [485] "ENSG00000284727" "ENSG00000113558" "ENSG00000166592" "ENSG00000260708"
#>  [489] "ENSG00000083454" "ENSG00000173597" "ENSG00000168393" "ENSG00000186130"
#>  [493] "ENSG00000141552" "ENSG00000117298" "ENSG00000284681" "ENSG00000164930"
#>  [497] "ENSG00000186814" "ENSG00000213799" "ENSG00000259225" "ENSG00000275457"
#>  [501] "ENSG00000243742" "ENSG00000135111" "ENSG00000055070" "ENSG00000175105"
#>  [505] "ENSG00000174243" "ENSG00000120963" "ENSG00000261136" "ENSG00000242028"
#>  [509] "ENSG00000166181" "ENSG00000197140" "ENSG00000152102" "ENSG00000105298"
#>  [513] "ENSG00000007968" "ENSG00000067064" "ENSG00000148498" "ENSG00000112033"
#>  [517] "ENSG00000177917" "ENSG00000152439" "ENSG00000136942" "ENSG00000257103"
#>  [521] "ENSG00000269486" "ENSG00000196872" "ENSG00000121057" "ENSG00000285816"
#>  [525] "ENSG00000187905" "ENSG00000135622" "ENSG00000104823" "ENSG00000167842"
#>  [529] "ENSG00000155189" "ENSG00000188021" "ENSG00000088298" "ENSG00000159147"
#>  [533] "ENSG00000261824" "ENSG00000189212" "ENSG00000148985" "ENSG00000081870"
#>  [537] "ENSG00000167112" "ENSG00000086619" "ENSG00000164086" "ENSG00000006282"
#>  [541] "ENSG00000280106" "ENSG00000135631" "ENSG00000170458" "ENSG00000196511"
#>  [545] "ENSG00000117411" "ENSG00000168301" "ENSG00000183431" "ENSG00000163362"
#>  [549] "ENSG00000138463" "ENSG00000100890" "ENSG00000198554" "ENSG00000198885"
#>  [553] "ENSG00000146192" "ENSG00000124145" "ENSG00000102218" "ENSG00000143167"
#>  [557] "ENSG00000117697" "ENSG00000255302" "ENSG00000115286" "ENSG00000149269"
#>  [561] "ENSG00000179240" "ENSG00000188368" "ENSG00000184863" "ENSG00000280285"
#>  [565] "ENSG00000150394" "ENSG00000141086" "ENSG00000177465" "ENSG00000225465"
#>  [569] "ENSG00000175203" "ENSG00000165632" "ENSG00000139668" "ENSG00000009844"
#>  [573] "ENSG00000198690" "ENSG00000119681" "ENSG00000067221" "ENSG00000066777"
#>  [577] "ENSG00000111530" "ENSG00000110693" "ENSG00000204472" "ENSG00000185627"
#>  [581] "ENSG00000213281" "ENSG00000179364" "ENSG00000025156" "ENSG00000139910"
#>  [585] "ENSG00000262160" "ENSG00000159625" "ENSG00000106133" "ENSG00000105501"
#>  [589] "ENSG00000140678" "ENSG00000101336" "ENSG00000198042" "ENSG00000100503"
#>  [593] "ENSG00000101407" "ENSG00000118804" "ENSG00000279970" "ENSG00000044524"
#>  [597] "ENSG00000135316" "ENSG00000184840" "ENSG00000230448" "ENSG00000270091"
#>  [601] "ENSG00000174903" "ENSG00000179314" "ENSG00000171202" "ENSG00000110318"
#>  [605] "ENSG00000149541" "ENSG00000142065" "ENSG00000125245" "ENSG00000182158"
#>  [609] "ENSG00000205213" "ENSG00000130177" "ENSG00000115109" "ENSG00000090539"
#>  [613] "ENSG00000166526" "ENSG00000173706" "ENSG00000240401" "ENSG00000172403"
#>  [617] "ENSG00000150471" "ENSG00000175445" "ENSG00000013810" "ENSG00000276411"
#>  [621] "ENSG00000213203" "ENSG00000038210" "ENSG00000213888" "ENSG00000111837"
#>  [625] "ENSG00000228727" "ENSG00000107874" "ENSG00000254838" "ENSG00000050767"
#>  [629] "ENSG00000221914" "ENSG00000108852" "ENSG00000115275" "ENSG00000169100"
#>  [633] "ENSG00000103495" "ENSG00000255142" "ENSG00000250240" "ENSG00000141052"
#>  [637] "ENSG00000043355" "ENSG00000107581" "ENSG00000143771" "ENSG00000205861"
#>  [641] "ENSG00000123545" "ENSG00000197037" "ENSG00000083642" "ENSG00000164032"
#>  [645] "ENSG00000143368" "ENSG00000203985" "ENSG00000223804" "ENSG00000157514"
#>  [649] "ENSG00000083635" "ENSG00000186235" "ENSG00000243147" "ENSG00000136010"
#>  [653] "ENSG00000107518" "ENSG00000158122" "ENSG00000134001" "ENSG00000104381"
#>  [657] "ENSG00000107521" "ENSG00000083097" "ENSG00000151090" "ENSG00000165359"
#>  [661] "ENSG00000116922" "ENSG00000146197" "ENSG00000073849" "ENSG00000137142"
#>  [665] "ENSG00000075618" "ENSG00000087157" "ENSG00000011347" "ENSG00000166165"
#>  [669] "ENSG00000125266" "ENSG00000013293" "ENSG00000196187" "ENSG00000103168"
#>  [673] "ENSG00000136522" "ENSG00000180879" "ENSG00000260729" "ENSG00000129355"
#>  [677] "ENSG00000103671" "ENSG00000123575" "ENSG00000284633" "ENSG00000264343"
#>  [681] "ENSG00000117525" "ENSG00000149089" "ENSG00000108187" "ENSG00000162722"
#>  [685] "ENSG00000173894" "ENSG00000165502" "ENSG00000178538" "ENSG00000159363"
#>  [689] "ENSG00000113068" "ENSG00000169871" "ENSG00000204209" "ENSG00000162636"
#>  [693] "ENSG00000105072" "ENSG00000114738" "ENSG00000163807" "ENSG00000129351"
#>  [697] "ENSG00000123349" "ENSG00000172006" "ENSG00000101146" "ENSG00000250462"
#>  [701] "ENSG00000156273" "ENSG00000074966" "ENSG00000186827" "ENSG00000173660"
#>  [705] "ENSG00000142330" "ENSG00000003756" "ENSG00000249962" "ENSG00000179918"
#>  [709] "ENSG00000233369" "ENSG00000234745" "ENSG00000236567" "ENSG00000242616"
#>  [713] "ENSG00000128607" "ENSG00000228649" "ENSG00000112246" "ENSG00000229852"
#>  [717] "ENSG00000273015" "ENSG00000169891" "ENSG00000113580" "ENSG00000126749"
#>  [721] "ENSG00000226758" "ENSG00000120549" "ENSG00000280800" "ENSG00000279673"
#>  [725] "ENSG00000188056" "ENSG00000130150" "ENSG00000108671" "ENSG00000179168"
#>  [729] "ENSG00000114554" "ENSG00000126003" "ENSG00000147082" "ENSG00000168497"
#>  [733] "ENSG00000157741" "ENSG00000177989" "ENSG00000103494" "ENSG00000151746"
#>  [737] "ENSG00000118579" "ENSG00000169241" "ENSG00000168259" "ENSG00000110013"
#>  [741] "ENSG00000253214" "ENSG00000168014" "ENSG00000109794" "ENSG00000163531"
#>  [745] "ENSG00000137494" "ENSG00000247934" "ENSG00000147421" "ENSG00000280345"
#>  [749] "ENSG00000162437" "ENSG00000131876" "ENSG00000130635" "ENSG00000272884"
#>  [753] "ENSG00000136878" "ENSG00000170185" "ENSG00000158792" "ENSG00000074410"
#>  [757] "ENSG00000171757" "ENSG00000275763" "ENSG00000179886" "ENSG00000254254"
#>  [761] "ENSG00000171631" "ENSG00000128891" "ENSG00000168209" "ENSG00000266820"
#>  [765] "ENSG00000186591" "ENSG00000281005" "ENSG00000185721" "ENSG00000065621"
#>  [769] "ENSG00000104695" "ENSG00000140488" "ENSG00000162711" "ENSG00000185664"
#>  [773] "ENSG00000164037" "ENSG00000257815" "ENSG00000180425" "ENSG00000274051"
#>  [777] "ENSG00000136935" "ENSG00000075785" "ENSG00000134030" "ENSG00000169410"
#>  [781] "ENSG00000168228" "ENSG00000279822" "ENSG00000132329" "ENSG00000164885"
#>  [785] "ENSG00000174740" "ENSG00000184164" "ENSG00000167632" "ENSG00000234648"
#>  [789] "ENSG00000100060" "ENSG00000055208" "ENSG00000168152" "ENSG00000114013"
#>  [793] "ENSG00000260644" "ENSG00000130159" "ENSG00000197548" "ENSG00000136718"
#>  [797] "ENSG00000145907" "ENSG00000167693" "ENSG00000132356" "ENSG00000253981"
#>  [801] "ENSG00000162736" "ENSG00000159842" "ENSG00000267401" "ENSG00000160685"
#>  [805] "ENSG00000198060" "ENSG00000175538" "ENSG00000055332" "ENSG00000132522"
#>  [809] "ENSG00000164989" "ENSG00000142235" "ENSG00000274012" "ENSG00000171469"
#>  [813] "ENSG00000167748" "ENSG00000255921" "ENSG00000085276" "ENSG00000243069"
#>  [817] "ENSG00000245975" "ENSG00000168824" "ENSG00000159063" "ENSG00000101444"
#>  [821] "ENSG00000236008" "ENSG00000143641" "ENSG00000110274" "ENSG00000211445"
#>  [825] "ENSG00000122042" "ENSG00000081019" "ENSG00000283103" "ENSG00000064393"
#>  [829] "ENSG00000196074" "ENSG00000272146" "ENSG00000107731" "ENSG00000104714"
#>  [833] "ENSG00000180616" "ENSG00000197496" "ENSG00000137198" "ENSG00000164211"
#>  [837] "ENSG00000185808" "ENSG00000148229" "ENSG00000116830" "ENSG00000186431"
#>  [841] "ENSG00000197291" "ENSG00000100711" "ENSG00000274767" "ENSG00000110665"
#>  [845] "ENSG00000038219" "ENSG00000167280" "ENSG00000135637" "ENSG00000198399"
#>  [849] "ENSG00000072121" "ENSG00000085999" "ENSG00000251230" "ENSG00000270629"
#>  [853] "ENSG00000144161" "ENSG00000111981" "ENSG00000197157" "ENSG00000160679"
#>  [857] "ENSG00000112406" "ENSG00000276931" "ENSG00000227036" "ENSG00000275294"
#>  [861] "ENSG00000119711" "ENSG00000186716" "ENSG00000225492" "ENSG00000276850"
#>  [865] "ENSG00000164818" "ENSG00000204086" "ENSG00000119938" "ENSG00000234840"
#>  [869] "ENSG00000162461" "ENSG00000137601" "ENSG00000120697" "ENSG00000157227"
#>  [873] "ENSG00000108100" "ENSG00000100401" "ENSG00000124602" "ENSG00000278615"
#>  [877] "ENSG00000215156" "ENSG00000141933" "ENSG00000102054" "ENSG00000166405"
#>  [881] "ENSG00000158470" "ENSG00000085433" "ENSG00000147459" "ENSG00000165644"
#>  [885] "ENSG00000173258" "ENSG00000136717" "ENSG00000161671" "ENSG00000226445"
#>  [889] "ENSG00000177800" "ENSG00000164620" "ENSG00000264743" "ENSG00000077147"
#>  [893] "ENSG00000226419" "ENSG00000176170" "ENSG00000160766" "ENSG00000259030"
#>  [897] "ENSG00000137497" "ENSG00000143878" "ENSG00000139344" "ENSG00000237484"
#>  [901] "ENSG00000104133" "ENSG00000250734" "ENSG00000170558" "ENSG00000152904"
#>  [905] "ENSG00000247240" "ENSG00000143341" "ENSG00000282870" "ENSG00000165389"
#>  [909] "ENSG00000019582" "ENSG00000285887" "ENSG00000225489" "ENSG00000165895"
#>  [913] "ENSG00000155561" "ENSG00000011451" "ENSG00000256713" "ENSG00000205581"
#>  [917] "ENSG00000140474" "ENSG00000140105" "ENSG00000163430" "ENSG00000248101"
#>  [921] "ENSG00000103994" "ENSG00000177663" "ENSG00000268043" "ENSG00000144935"
#>  [925] "ENSG00000227359" "ENSG00000167807" "ENSG00000110987" "ENSG00000130810"
#>  [929] "ENSG00000168282" "ENSG00000120519" "ENSG00000267702" "ENSG00000177932"
#>  [933] "ENSG00000273702" "ENSG00000162613" "ENSG00000246174" "ENSG00000159111"
#>  [937] "ENSG00000106689" "ENSG00000188223" "ENSG00000165898" "ENSG00000106399"
#>  [941] "ENSG00000178607" "ENSG00000143851" "ENSG00000132549" "ENSG00000162433"
#>  [945] "ENSG00000260911" "ENSG00000225648" "ENSG00000171766" "ENSG00000115042"
#>  [949] "ENSG00000104412" "ENSG00000105519" "ENSG00000177733" "ENSG00000106077"
#>  [953] "ENSG00000255073" "ENSG00000215695" "ENSG00000228817" "ENSG00000137076"
#>  [957] "ENSG00000127481" "ENSG00000169519" "ENSG00000203446" "ENSG00000158402"
#>  [961] "ENSG00000133895" "ENSG00000271361" "ENSG00000135698" "ENSG00000172399"
#>  [965] "ENSG00000129968" "ENSG00000003402" "ENSG00000162032" "ENSG00000107643"
#>  [969] "ENSG00000155287" "ENSG00000114520" "ENSG00000104131" "ENSG00000111725"
#>  [973] "ENSG00000153976" "ENSG00000147592" "ENSG00000058335" "ENSG00000158352"
#>  [977] "ENSG00000143889" "ENSG00000229589" "ENSG00000158062" "ENSG00000100036"
#>  [981] "ENSG00000264885" "ENSG00000065361" "ENSG00000204261" "ENSG00000165935"
#>  [985] "ENSG00000155096" "ENSG00000166813" "ENSG00000197774" "ENSG00000284946"
#>  [989] "ENSG00000154277" "ENSG00000134453" "ENSG00000152076" "ENSG00000177302"
#>  [993] "ENSG00000224051" "ENSG00000142875" "ENSG00000110442" "ENSG00000146904"
#>  [997] "ENSG00000134072" "ENSG00000165304" "ENSG00000044459" "ENSG00000166123"
#> [1001] "ENSG00000182224" "ENSG00000131051" "ENSG00000189043" "ENSG00000100030"
#> [1005] "ENSG00000235437" "ENSG00000148288" "ENSG00000184220" "ENSG00000111846"
#> [1009] "ENSG00000144649" "ENSG00000074706" "ENSG00000135835" "ENSG00000074660"
#> [1013] "ENSG00000159239" "ENSG00000181896" "ENSG00000177889" "ENSG00000196865"
#> [1017] "ENSG00000130300" "ENSG00000148339" "ENSG00000250198" "ENSG00000152492"
#> [1021] "ENSG00000179698" "ENSG00000134107" "ENSG00000214455" "ENSG00000164106"
#> [1025] "ENSG00000226383" "ENSG00000113721" "ENSG00000165338" "ENSG00000174945"
#> [1029] "ENSG00000203288" "ENSG00000123191" "ENSG00000198466" "ENSG00000081377"
#> [1033] "ENSG00000270022" "ENSG00000135829" "ENSG00000156603" "ENSG00000140320"
#> [1037] "ENSG00000130748" "ENSG00000248593" "ENSG00000245904" "ENSG00000003989"
#> [1041] "ENSG00000115053" "ENSG00000213445" "ENSG00000108433" "ENSG00000250067"
#> [1045] "ENSG00000197182" "ENSG00000144837" "ENSG00000125648" "ENSG00000162777"
#> [1049] "ENSG00000145979" "ENSG00000134874" "ENSG00000104872" "ENSG00000272419"
#> [1053] "ENSG00000241168" "ENSG00000013563" "ENSG00000186603" "ENSG00000008283"
#> [1057] "ENSG00000026559" "ENSG00000108439" "ENSG00000131435" "ENSG00000106608"
#> [1061] "ENSG00000231187" "ENSG00000157985" "ENSG00000100304" "ENSG00000028310"
#> [1065] "ENSG00000225151" "ENSG00000011590" "ENSG00000285634" "ENSG00000151694"
#> [1069] "ENSG00000152242" "ENSG00000137547" "ENSG00000132475" "ENSG00000164093"
#> [1073] "ENSG00000183741" "ENSG00000070371" "ENSG00000177640" "ENSG00000134597"
#> [1077] "ENSG00000171049" "ENSG00000213599" "ENSG00000183092" "ENSG00000137504"
#> [1081] "ENSG00000142669" "ENSG00000238164" "ENSG00000106624" "ENSG00000164283"
#> [1085] "ENSG00000011028" "ENSG00000169744" "ENSG00000142186" "ENSG00000084731"
#> [1089] "ENSG00000117385" "ENSG00000182742" "ENSG00000249309" "ENSG00000279672"
#> [1093] "ENSG00000167522" "ENSG00000139597" "ENSG00000184557" "ENSG00000174483"
#> [1097] "ENSG00000179630" "ENSG00000093009" "ENSG00000262979" "ENSG00000163638"
#> [1101] "ENSG00000130638" "ENSG00000122085" "ENSG00000176853" "ENSG00000117226"
#> [1105] "ENSG00000162946" "ENSG00000226259" "ENSG00000163939" "ENSG00000233058"
#> [1109] "ENSG00000175061" "ENSG00000272912" "ENSG00000180694" "ENSG00000144744"
#> [1113] "ENSG00000115415" "ENSG00000151012" "ENSG00000260743" "ENSG00000117133"
#> [1117] "ENSG00000108175" "ENSG00000152939" "ENSG00000170681" "ENSG00000100991"
#> [1121] "ENSG00000149488" "ENSG00000187688" "ENSG00000181396" "ENSG00000197245"
#> [1125] "ENSG00000161642" "ENSG00000145882" "ENSG00000181284" "ENSG00000184792"
#> [1129] "ENSG00000278175" "ENSG00000067369" "ENSG00000111962" "ENSG00000185385"
#> [1133] "ENSG00000163697" "ENSG00000106078" "ENSG00000186416" "ENSG00000267745"
#> [1137] "ENSG00000174718" "ENSG00000272933" "ENSG00000068079" "ENSG00000267629"
#> [1141] "ENSG00000177383" "ENSG00000140285" "ENSG00000270149" "ENSG00000157693"
#> [1145] "ENSG00000197302" "ENSG00000164823" "ENSG00000279091" "ENSG00000197180"
#> [1149] "ENSG00000011332" "ENSG00000198837" "ENSG00000122359" "ENSG00000013375"
#> [1153] "ENSG00000284981" "ENSG00000143324" "ENSG00000104472" "ENSG00000196387"
#> [1157] "ENSG00000166311" "ENSG00000182606" "ENSG00000260018" "ENSG00000179909"
#> [1161] "ENSG00000280079" "ENSG00000153993" "ENSG00000120071" "ENSG00000230521"
#> [1165] "ENSG00000285702" "ENSG00000007047" "ENSG00000142444" "ENSG00000138101"
#> [1169] "ENSG00000158113" "ENSG00000128918" "ENSG00000124659" "ENSG00000185272"
#> [1173] "ENSG00000167395" "ENSG00000164542" "ENSG00000068024" "ENSG00000139436"
#> [1177] "ENSG00000112877" "ENSG00000106346" "ENSG00000213658" "ENSG00000236539"
#> [1181] "ENSG00000162378" "ENSG00000188185" "ENSG00000129951" "ENSG00000115194"
#> [1185] "ENSG00000021776" "ENSG00000149091" "ENSG00000181852" "ENSG00000129255"
#> [1189] "ENSG00000111785" "ENSG00000152953" "ENSG00000171824" "ENSG00000261997"
#> [1193] "ENSG00000128805" "ENSG00000075420" "ENSG00000228203" "ENSG00000260810"
#> [1197] "ENSG00000188389" "ENSG00000280187" "ENSG00000162924" "ENSG00000121390"
#> [1201] "ENSG00000103037" "ENSG00000189319" "ENSG00000196605" "ENSG00000163482"
#> [1205] "ENSG00000232593" "ENSG00000112149" "ENSG00000255521" "ENSG00000099956"
#> [1209] "ENSG00000261795" "ENSG00000102359" "ENSG00000183696" "ENSG00000279456"
#> [1213] "ENSG00000115468" "ENSG00000258315" "ENSG00000215440" "ENSG00000275052"
#> [1217] "ENSG00000167105" "ENSG00000065183" "ENSG00000257365" "ENSG00000255355"
#> [1221] "ENSG00000101460" "ENSG00000170464" "ENSG00000273143" "ENSG00000269982"
#> [1225] "ENSG00000239653" "ENSG00000224578" "ENSG00000054967" "ENSG00000197646"
#> [1229] "ENSG00000130544" "ENSG00000198535" "ENSG00000205846" "ENSG00000046889"
#> [1233] "ENSG00000116455" "ENSG00000154309" "ENSG00000275410" "ENSG00000116903"
#> [1237] "ENSG00000164292" "ENSG00000167553" "ENSG00000133121" "ENSG00000118308"
#> [1241] "ENSG00000204177" "ENSG00000014824" "ENSG00000132429" "ENSG00000141098"
#> [1245] "ENSG00000124126" "ENSG00000064489" "ENSG00000157326" "ENSG00000089280"
#> [1249] "ENSG00000278864" "ENSG00000281571" "ENSG00000155511" "ENSG00000262089"
#> [1253] "ENSG00000189042" "ENSG00000104611" "ENSG00000075213" "ENSG00000259583"
#> [1257] "ENSG00000205309" "ENSG00000164171" "ENSG00000144120" "ENSG00000259590"
#> [1261] "ENSG00000171453" "ENSG00000198646" "ENSG00000214279" "ENSG00000271646"
#> [1265] "ENSG00000089351" "ENSG00000167333" "ENSG00000096384" "ENSG00000130204"
#> [1269] "ENSG00000168216" "ENSG00000108352" "ENSG00000157388" "ENSG00000126759"
#> [1273] "ENSG00000242689" "ENSG00000115461" "ENSG00000069869" "ENSG00000042088"
#> [1277] "ENSG00000120262" "ENSG00000104866" "ENSG00000242430" "ENSG00000127022"
#> [1281] "ENSG00000159873" "ENSG00000248905" "ENSG00000106682" "ENSG00000101639"
#> [1285] "ENSG00000269983" "ENSG00000199753" "ENSG00000164114" "ENSG00000269604"
#> [1289] "ENSG00000240801" "ENSG00000114127" "ENSG00000174928" "ENSG00000284770"
#> [1293] "ENSG00000133958" "ENSG00000183087" "ENSG00000170837" "ENSG00000105607"
#> [1297] "ENSG00000196510" "ENSG00000267858" "ENSG00000130414" "ENSG00000085415"
#> [1301] "ENSG00000182389" "ENSG00000186583" "ENSG00000123159" "ENSG00000164403"
#> [1305] "ENSG00000260075" "ENSG00000284968" "ENSG00000105705" "ENSG00000132535"
#> [1309] "ENSG00000142694" "ENSG00000272047" "ENSG00000265688" "ENSG00000243064"
#> [1313] "ENSG00000167536" "ENSG00000099308" "ENSG00000285437" "ENSG00000198719"
#> [1317] "ENSG00000091986" "ENSG00000063177" "ENSG00000219665" "ENSG00000260196"
#> [1321] "ENSG00000166189" "ENSG00000115935" "ENSG00000132481" "ENSG00000270060"
#> [1325] "ENSG00000161647" "ENSG00000173540" "ENSG00000225864" "ENSG00000235897"
#> [1329] "ENSG00000232931" "ENSG00000065989" "ENSG00000087460" "ENSG00000229368"
#> [1333] "ENSG00000146950" "ENSG00000177839" "ENSG00000127081" "ENSG00000095380"
#> [1337] "ENSG00000214013" "ENSG00000056972" "ENSG00000251046" "ENSG00000169299"
#> [1341] "ENSG00000170689" "ENSG00000254639" "ENSG00000134982" "ENSG00000272851"
#> [1345] "ENSG00000275389" "ENSG00000148019" "ENSG00000277534" "ENSG00000278993"
#> [1349] "ENSG00000144785" "ENSG00000172748" "ENSG00000137070" "ENSG00000174276"
#> [1353] "ENSG00000146648" "ENSG00000139915" "ENSG00000254561" "ENSG00000188820"
#> [1357] "ENSG00000233117" "ENSG00000258367" "ENSG00000250120" "ENSG00000155111"
#> [1361] "ENSG00000064300" "ENSG00000224356" "ENSG00000104408" "ENSG00000164983"
#> [1365] "ENSG00000177646" "ENSG00000120647" "ENSG00000100918" "ENSG00000144648"
#> [1369] "ENSG00000104660" "ENSG00000164088" "ENSG00000106443" "ENSG00000158683"
#> [1373] "ENSG00000107185" "ENSG00000259952" "ENSG00000124508" "ENSG00000221955"
#> [1377] "ENSG00000127125" "ENSG00000169896" "ENSG00000133026" "ENSG00000161179"
#> [1381] "ENSG00000229644" "ENSG00000127220" "ENSG00000263004" "ENSG00000166261"
#> [1385] "ENSG00000106554" "ENSG00000184708" "ENSG00000107282" "ENSG00000176125"
#> [1389] "ENSG00000157036" "ENSG00000006125" "ENSG00000162695" "ENSG00000257702"
#> [1393] "ENSG00000088247" "ENSG00000216490" "ENSG00000134545" "ENSG00000197808"
#> [1397] "ENSG00000134285" "ENSG00000158552" "ENSG00000138750" "ENSG00000103381"
#> [1401] "ENSG00000163431" "ENSG00000186318" "ENSG00000226380" "ENSG00000235174"
#> [1405] "ENSG00000112473" "ENSG00000229914" "ENSG00000136160" "ENSG00000209482"
#> [1409] "ENSG00000139218" "ENSG00000067167" "ENSG00000105011" "ENSG00000196459"
#> [1413] "ENSG00000181090" "ENSG00000260693" "ENSG00000242114" "ENSG00000087076"
#> [1417] "ENSG00000197780" "ENSG00000100150" "ENSG00000260669" "ENSG00000127838"
#> [1421] "ENSG00000176533" "ENSG00000185608" "ENSG00000130511" "ENSG00000095261"
#> [1425] "ENSG00000198053" "ENSG00000241404" "ENSG00000143850" "ENSG00000123444"
#> [1429] "ENSG00000279900" "ENSG00000188522" "ENSG00000223704" "ENSG00000090520"
#> [1433] "ENSG00000059804" "ENSG00000174842" "ENSG00000138376" "ENSG00000145687"
#> [1437] "ENSG00000087303" "ENSG00000160200" "ENSG00000249645" "ENSG00000213949"
#> [1441] "ENSG00000232774" "ENSG00000155008" "ENSG00000198355" "ENSG00000106049"
#> [1445] "ENSG00000100321" "ENSG00000100320" "ENSG00000142621" "ENSG00000254995"
#> [1449] "ENSG00000136367" "ENSG00000121578" "ENSG00000256061" "ENSG00000083093"
#> [1453] "ENSG00000114859" "ENSG00000169291" "ENSG00000100985" "ENSG00000172738"
#> [1457] "ENSG00000234608" "ENSG00000160948" "ENSG00000205710" "ENSG00000162430"
#> [1461] "ENSG00000205702" "ENSG00000087903" "ENSG00000189152" "ENSG00000126453"
#> [1465] "ENSG00000225783" "ENSG00000284491" "ENSG00000255455" "ENSG00000174669"
#> [1469] "ENSG00000162367" "ENSG00000168159" "ENSG00000234444" "ENSG00000128581"
#> [1473] "ENSG00000166881" "ENSG00000163513" "ENSG00000144136" "ENSG00000204616"
#> [1477] "ENSG00000231806" "ENSG00000168904" "ENSG00000100767" "ENSG00000230724"
#> [1481] "ENSG00000178053" "ENSG00000104936" "ENSG00000055044" "ENSG00000129295"
#> [1485] "ENSG00000161217" "ENSG00000215160" "ENSG00000091527" "ENSG00000148358"
#> [1489] "ENSG00000160551" "ENSG00000186564" "ENSG00000172757" "ENSG00000147535"
#> [1493] "ENSG00000272140" "ENSG00000169223" "ENSG00000141452" "ENSG00000272636"
#> [1497] "ENSG00000175984" "ENSG00000143622" "ENSG00000214189" "ENSG00000213886"
#> [1501] "ENSG00000246705" "ENSG00000182218" "ENSG00000104687" "ENSG00000165792"
#> [1505] "ENSG00000109756" "ENSG00000273294" "ENSG00000137868" "ENSG00000092841"
#> [1509] "ENSG00000151575" "ENSG00000125249" "ENSG00000185433" "ENSG00000256087"
#> [1513] "ENSG00000140262" "ENSG00000260686" "ENSG00000080493" "ENSG00000173933"
#> [1517] "ENSG00000110321" "ENSG00000133935" "ENSG00000148154" "ENSG00000213453"
#> [1521] "ENSG00000227540" "ENSG00000154930" "ENSG00000123143" "ENSG00000074855"
#> [1525] "ENSG00000267321" "ENSG00000157551" "ENSG00000116747" "ENSG00000264448"
#> [1529] "ENSG00000285644" "ENSG00000005249" "ENSG00000013374" "ENSG00000007171"
#> [1533] "ENSG00000142409" "ENSG00000183624" "ENSG00000167625" "ENSG00000146938"
#> [1537] "ENSG00000183020" "ENSG00000198546" "ENSG00000276509" "ENSG00000280145"
#> [1541] "ENSG00000117595" "ENSG00000270157" "ENSG00000173068" "ENSG00000236383"
#> [1545] "ENSG00000126562" "ENSG00000196083" "ENSG00000119684" "ENSG00000273374"
#> [1549] "ENSG00000179743" "ENSG00000157869" "ENSG00000116016" "ENSG00000100219"
#> [1553] "ENSG00000257086" "ENSG00000205086" "ENSG00000280798" "ENSG00000106804"
#> [1557] "ENSG00000127666" "ENSG00000167232" "ENSG00000133624" "ENSG00000270607"
#> [1561] "ENSG00000120832" "ENSG00000164169" "ENSG00000123131" "ENSG00000279641"
#> [1565] "ENSG00000258655" "ENSG00000161800" "ENSG00000134717" "ENSG00000227115"
#> [1569] "ENSG00000225439" "ENSG00000125900" "ENSG00000153246" "ENSG00000135913"
#> [1573] "ENSG00000108840" "ENSG00000240889" "ENSG00000204482" "ENSG00000224905"
#> [1577] "ENSG00000255224" "ENSG00000145431" "ENSG00000124299" "ENSG00000100228"
#> [1581] "ENSG00000256525" "ENSG00000246263" "ENSG00000075240" "ENSG00000276840"
#> [1585] "ENSG00000177084" "ENSG00000162441" "ENSG00000138030" "ENSG00000120868"
#> [1589] "ENSG00000116212" "ENSG00000137713" "ENSG00000070501" "ENSG00000079246"
#> [1593] "ENSG00000100938" "ENSG00000197296" "ENSG00000134748" "ENSG00000110911"
#> [1597] "ENSG00000135018" "ENSG00000054267" "ENSG00000145934" "ENSG00000228427"
#> [1601] "ENSG00000144891" "ENSG00000138642" "ENSG00000151693" "ENSG00000186854"
#> [1605] "ENSG00000197632" "ENSG00000213204" "ENSG00000144401" "ENSG00000227963"
#> [1609] "ENSG00000113758" "ENSG00000258938" "ENSG00000131781" "ENSG00000072571"
#> [1613] "ENSG00000134504" "ENSG00000105619" "ENSG00000099625" "ENSG00000175782"
#> [1617] "ENSG00000232783" "ENSG00000156804" "ENSG00000090382" "ENSG00000214940"
#> [1621] "ENSG00000157152" "ENSG00000244733" "ENSG00000010404" "ENSG00000047578"
#> [1625] "ENSG00000145439" "ENSG00000163958" "ENSG00000234191" "ENSG00000241360"
#> [1629] "ENSG00000154258" "ENSG00000227502" "ENSG00000173295" "ENSG00000102393"
#> [1633] "ENSG00000149582" "ENSG00000261359" "ENSG00000157827" "ENSG00000164252"
#> [1637] "ENSG00000237988" "ENSG00000123178" "ENSG00000198663" "ENSG00000131446"
#> [1641] "ENSG00000142959" "ENSG00000183628" "ENSG00000105229" "ENSG00000149177"
#> [1645] "ENSG00000234964" "ENSG00000244563" "ENSG00000159214" "ENSG00000170684"
#> [1649] "ENSG00000230069" "ENSG00000167264" "ENSG00000145220" "ENSG00000133835"
#> [1653] "ENSG00000135272" "ENSG00000173065" "ENSG00000107789" "ENSG00000269113"
#> [1657] "ENSG00000138688" "ENSG00000077254" "ENSG00000163701" "ENSG00000276791"
#> [1661] "ENSG00000070476" "ENSG00000119707" "ENSG00000205084" "ENSG00000168234"
#> [1665] "ENSG00000228434" "ENSG00000076944" "ENSG00000171443" "ENSG00000151849"
#> [1669] "ENSG00000163975" "ENSG00000151893" "ENSG00000144848" "ENSG00000049759"
#> [1673] "ENSG00000141905" "ENSG00000197579" "ENSG00000116141" "ENSG00000224023"
#> [1677] "ENSG00000183935" "ENSG00000147789" "ENSG00000174780" "ENSG00000112941"
#> [1681] "ENSG00000110237" "ENSG00000146267" "ENSG00000233757" "ENSG00000122482"
#> [1685] "ENSG00000155465" "ENSG00000119397" "ENSG00000240057" "ENSG00000136273"
#> [1689] "ENSG00000182175" "ENSG00000175931" "ENSG00000136152" "ENSG00000138496"
#> [1693] "ENSG00000163541" "ENSG00000168056" "ENSG00000188529" "ENSG00000220008"
#> [1697] "ENSG00000221968" "ENSG00000136261" "ENSG00000166900" "ENSG00000189001"
#> [1701] "ENSG00000108559" "ENSG00000167658" "ENSG00000269044" "ENSG00000231683"
#> [1705] "ENSG00000165282" "ENSG00000144893" "ENSG00000131941" "ENSG00000138613"
#> [1709] "ENSG00000165474" "ENSG00000154914" "ENSG00000106366" "ENSG00000105088"
#> [1713] "ENSG00000136279" "ENSG00000253327" "ENSG00000163607" "ENSG00000100239"
#> [1717] "ENSG00000142082" "ENSG00000048828" "ENSG00000214194" "ENSG00000267474"
#> [1721] "ENSG00000164494" "ENSG00000100368" "ENSG00000141401" "ENSG00000164188"
#> [1725] "ENSG00000167705" "ENSG00000163751" "ENSG00000267248" "ENSG00000180806"
#> [1729] "ENSG00000162929" "ENSG00000185345" "ENSG00000279714" "ENSG00000165661"
#> [1733] "ENSG00000104067" "ENSG00000143970" "ENSG00000254681" "ENSG00000131626"
#> [1737] "ENSG00000188783" "ENSG00000122390" "ENSG00000150527" "ENSG00000105669"
#> [1741] "ENSG00000214826" "ENSG00000278768" "ENSG00000111644" "ENSG00000170175"
#> [1745] "ENSG00000282936" "ENSG00000155729" "ENSG00000108469" "ENSG00000136720"
#> [1749] "ENSG00000233930" "ENSG00000159685" "ENSG00000181938" "ENSG00000179051"
#> [1753] "ENSG00000188886" "ENSG00000185829" "ENSG00000148362" "ENSG00000112294"
#> [1757] "ENSG00000196961" "ENSG00000028839" "ENSG00000134815" "ENSG00000180867"
#> [1761] "ENSG00000100216" "ENSG00000196526" "ENSG00000285761" "ENSG00000213411"
#> [1765] "ENSG00000102030" "ENSG00000040199" "ENSG00000107738" "ENSG00000177425"
#> [1769] "ENSG00000146426" "ENSG00000165152" "ENSG00000267426" "ENSG00000146143"
#> [1773] "ENSG00000185267" "ENSG00000132661" "ENSG00000254772" "ENSG00000174720"
#> [1777] "ENSG00000131238" "ENSG00000151702" "ENSG00000272755" "ENSG00000270120"
#> [1781] "ENSG00000109111" "ENSG00000135045" "ENSG00000162735" "ENSG00000080546"
#> [1785] "ENSG00000149930" "ENSG00000163293" "ENSG00000105397" "ENSG00000147533"
#> [1789] "ENSG00000099800" "ENSG00000159079" "ENSG00000107263" "ENSG00000198406"
#> [1793] "ENSG00000285641" "ENSG00000275718" "ENSG00000090889" "ENSG00000210082"
#> [1797] "ENSG00000181555" "ENSG00000169018" "ENSG00000155324" "ENSG00000106333"
#> [1801] "ENSG00000155666" "ENSG00000152705" "ENSG00000196693" "ENSG00000004487"
#> [1805] "ENSG00000279827" "ENSG00000144306" "ENSG00000174306" "ENSG00000165949"
#> [1809] "ENSG00000131019" "ENSG00000104973" "ENSG00000136490" "ENSG00000102878"
#> [1813] "ENSG00000102575" "ENSG00000187243" "ENSG00000129451" "ENSG00000101695"
#> [1817] "ENSG00000117519" "ENSG00000139324" "ENSG00000092345" "ENSG00000186815"
#> [1821] "ENSG00000145362" "ENSG00000274615" "ENSG00000166821" "ENSG00000064607"
#> [1825] "ENSG00000268362" "ENSG00000273760" "ENSG00000122705" "ENSG00000075884"
#> [1829] "ENSG00000274461" "ENSG00000132589" "ENSG00000131966" "ENSG00000148399"
#> [1833] "ENSG00000253846" "ENSG00000237892" "ENSG00000133398" "ENSG00000277511"
#> [1837] "ENSG00000128641" "ENSG00000090339" "ENSG00000248632" "ENSG00000100364"
#> [1841] "ENSG00000158486" "ENSG00000146574" "ENSG00000124120" "ENSG00000054965"
#> [1845] "ENSG00000254788" "ENSG00000277806" "ENSG00000065615" "ENSG00000120686"
#> [1849] "ENSG00000241343" "ENSG00000171612" "ENSG00000140553" "ENSG00000118276"
#> [1853] "ENSG00000213793" "ENSG00000061337" "ENSG00000115685" "ENSG00000008056"
#> [1857] "ENSG00000160219" "ENSG00000163728" "ENSG00000196458" "ENSG00000169733"
#> [1861] "ENSG00000155893" "ENSG00000139687" "ENSG00000137193" "ENSG00000197020"
#> [1865] "ENSG00000159479" "ENSG00000196391" "ENSG00000184470" "ENSG00000182173"
#> [1869] "ENSG00000084676" "ENSG00000185499" "ENSG00000108018" "ENSG00000182551"
#> [1873] "ENSG00000115541" "ENSG00000103353" "ENSG00000198189" "ENSG00000203666"
#> [1877] "ENSG00000266389" "ENSG00000080822" "ENSG00000184500" "ENSG00000166471"
#> [1881] "ENSG00000197417" "ENSG00000279311" "ENSG00000056586" "ENSG00000186193"
#> [1885] "ENSG00000164040" "ENSG00000263590" "ENSG00000144810" "ENSG00000196247"
#> [1889] "ENSG00000277687" "ENSG00000244063" "ENSG00000278299" "ENSG00000166562"
#> [1893] "ENSG00000198833" "ENSG00000253372" "ENSG00000164182" "ENSG00000120742"
#> [1897] "ENSG00000136891" "ENSG00000183876" "ENSG00000088280" "ENSG00000203993"
#> [1901] "ENSG00000146555" "ENSG00000079337" "ENSG00000224837" "ENSG00000260793"
#> [1905] "ENSG00000132967" "ENSG00000247315" "ENSG00000234390" "ENSG00000134569"
#> [1909] "ENSG00000116704" "ENSG00000128683" "ENSG00000225791" "ENSG00000166275"
#> [1913] "ENSG00000105372" "ENSG00000174748" "ENSG00000118985" "ENSG00000125735"
#> [1917] "ENSG00000110422" "ENSG00000146842" "ENSG00000198920" "ENSG00000169895"
#> [1921] "ENSG00000185495" "ENSG00000243704" "ENSG00000206532" "ENSG00000163512"
#> [1925] "ENSG00000104219" "ENSG00000101474" "ENSG00000072364" "ENSG00000203497"
#> [1929] "ENSG00000163001" "ENSG00000168769" "ENSG00000139722" "ENSG00000164073"
#> [1933] "ENSG00000179950" "ENSG00000116670" "ENSG00000154920" "ENSG00000049769"
#> [1937] "ENSG00000149054" "ENSG00000276550" "ENSG00000272767" "ENSG00000181704"
#> [1941] "ENSG00000274528" "ENSG00000124479" "ENSG00000172349" "ENSG00000226950"
#> [1945] "ENSG00000133250" "ENSG00000118260" "ENSG00000227825" "ENSG00000182093"
#> [1949] "ENSG00000047849" "ENSG00000273033" "ENSG00000070367" "ENSG00000090266"
#> [1953] "ENSG00000141873" "ENSG00000066557" "ENSG00000175455" "ENSG00000269374"
#> [1957] "ENSG00000066455" "ENSG00000240929" "ENSG00000064687" "ENSG00000164758"
#> [1961] "ENSG00000196313" "ENSG00000259244" "ENSG00000274333" "ENSG00000257181"
#> [1965] "ENSG00000004399" "ENSG00000072786" "ENSG00000127252" "ENSG00000180530"
#> [1969] "ENSG00000006194" "ENSG00000168502" "ENSG00000065057" "ENSG00000156860"
#> [1973] "ENSG00000149599" "ENSG00000188505" "ENSG00000108557" "ENSG00000172197"
#> [1977] "ENSG00000067836" "ENSG00000241170" "ENSG00000224614" "ENSG00000100888"
#> [1981] "ENSG00000206149" "ENSG00000279348" "ENSG00000148950" "ENSG00000101856"
#> [1985] "ENSG00000091592" "ENSG00000251003" "ENSG00000138794" "ENSG00000156374"
#> [1989] "ENSG00000205730" "ENSG00000172046" "ENSG00000197451" "ENSG00000153774"
#> [1993] "ENSG00000139645" "ENSG00000118369" "ENSG00000249228" "ENSG00000264920"
#> [1997] "ENSG00000167074" "ENSG00000163867" "ENSG00000104388" "ENSG00000089123"
#> 
#> $input$arguments$keyType
#> [1] "ENSEMBL"
#> 
#> $input$arguments$OrgDb
#> OrgDb object:
#> | DBSCHEMAVERSION: 2.1
#> | Db type: OrgDb
#> | Supporting package: AnnotationDbi
#> | DBSCHEMA: HUMAN_DB
#> | ORGANISM: Homo sapiens
#> | SPECIES: Human
#> | EGSOURCEDATE: 2026-Mar18
#> | EGSOURCENAME: Entrez Gene
#> | EGSOURCEURL: ftp://ftp.ncbi.nlm.nih.gov/gene/DATA
#> | CENTRALID: EG
#> | TAXID: 9606
#> | GOSOURCENAME: Gene Ontology
#> | GOSOURCEURL: https://current.geneontology.org/ontology/go-basic.obo
#> | GOSOURCEDATE: 2026-01-23
#> | GOEGSOURCEDATE: 2026-Mar18
#> | GOEGSOURCENAME: Entrez Gene
#> | GOEGSOURCEURL: ftp://ftp.ncbi.nlm.nih.gov/gene/DATA
#> | KEGGSOURCENAME: KEGG GENOME
#> | KEGGSOURCEURL: ftp://ftp.genome.jp/pub/kegg/genomes
#> | KEGGSOURCEDATE: 2011-Mar15
#> | GPSOURCENAME: UCSC Genome Bioinformatics (Homo sapiens)
#> | GPSOURCEURL: ftp://hgdownload.cse.ucsc.edu/goldenPath/hg38/database
#> | GPSOURCEDATE: UTC-Mar19
#> | ENSOURCEDATE: 2025-Sep03
#> | ENSOURCENAME: Ensembl
#> | ENSOURCEURL: ftp://ftp.ensembl.org/pub/current_fasta
#> | UPSOURCENAME: Uniprot
#> | UPSOURCEURL: http://www.UniProt.org/
#> | UPSOURCEDATE: Fri Mar 20 10:22:53 2026
#> 
#> $input$arguments$ont
#> [1] "BP"
#> 
#> $input$arguments$pAdjustMethod
#> [1] "BH"
#> 
#> $input$arguments$pvalueCutoff
#> [1] 0.05
#> 
#> $input$arguments$qvalueCutoff
#> [1] 0.1
#> 
#> 
#> 
#> $annotation
#> $annotation$organism
#> [1] "Homo sapiens"
#> 
#> $annotation$gene_set_db
#> [1] "GO"
#> 
#> $annotation$gene_set_db_version
#> [1] "3.23.1"
#> 
#> 
#> $timestamp
#> [1] "2026-06-10 09:55:35 UTC"
#> 
#> $session_info
#> R version 4.6.0 (2026-04-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.4 LTS
#> 
#> Matrix products: default
#> BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#>  [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: Etc/UTC
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats4    stats     graphics  grDevices utils     datasets  methods  
#> [8] base     
#> 
#> other attached packages:
#>  [1] topGO_2.65.0                SparseM_1.84-2             
#>  [3] GO.db_3.23.1                graph_1.91.0               
#>  [5] mosdef_1.9.0                clusterProfiler_4.21.0     
#>  [7] org.Hs.eg.db_3.23.1         AnnotationDbi_1.75.0       
#>  [9] DESeq2_1.53.0               SummarizedExperiment_1.43.0
#> [11] Biobase_2.73.1              MatrixGenerics_1.25.0      
#> [13] matrixStats_1.5.0           GenomicRanges_1.65.0       
#> [15] Seqinfo_1.3.0               IRanges_2.47.2             
#> [17] S4Vectors_0.51.3            BiocGenerics_0.59.7        
#> [19] generics_0.1.4              macrophage_1.29.0          
#> [21] EMMA_0.99.4                 BiocStyle_2.41.0           
#> 
#> loaded via a namespace (and not attached):
#>   [1] splines_4.6.0            BiocIO_1.23.3            bitops_1.0-9            
#>   [4] ggplotify_0.1.3          filelock_1.0.3           BiasedUrn_2.0.12        
#>   [7] tibble_3.3.1             polyclip_1.10-7          enrichit_0.1.4          
#>  [10] XML_3.99-0.23            lifecycle_1.0.5          httr2_1.2.2             
#>  [13] processx_3.9.0           lattice_0.22-9           MASS_7.3-65             
#>  [16] magrittr_2.0.5           sass_0.4.10              rmarkdown_2.31          
#>  [19] jquerylib_0.1.4          yaml_2.3.12              otel_0.2.0              
#>  [22] ggtangle_0.1.2           DBI_1.3.0                buildtools_1.0.0        
#>  [25] RColorBrewer_1.1-3       abind_1.4-8              purrr_1.2.2             
#>  [28] RCurl_1.98-1.19          yulab.utils_0.2.4        tweenr_2.0.3            
#>  [31] rappdirs_0.3.4           aisdk_1.4.12             gdtools_0.5.1           
#>  [34] enrichplot_1.33.0        ggrepel_0.9.8            tidytree_0.4.7          
#>  [37] maketools_1.3.2          codetools_0.2-20         DelayedArray_0.39.3     
#>  [40] DOSE_4.7.0               DT_0.34.0                ggforce_0.5.0           
#>  [43] tidyselect_1.2.1         aplot_0.2.9              UCSC.utils_1.9.0        
#>  [46] farver_2.1.2             goseq_1.65.0             BiocFileCache_3.3.0     
#>  [49] GenomicAlignments_1.49.0 jsonlite_2.0.0           systemfonts_1.3.2       
#>  [52] bbmle_1.0.25.1           tools_4.6.0              ggnewscale_0.5.2        
#>  [55] progress_1.2.3           treeio_1.37.0            Rcpp_1.1.1-1.1          
#>  [58] glue_1.8.1               SparseArray_1.13.2       BiocBaseUtils_1.15.1    
#>  [61] mgcv_1.9-4               xfun_0.58                geneLenDataBase_1.49.0  
#>  [64] qvalue_2.45.0            GenomeInfoDb_1.49.1      dplyr_1.2.1             
#>  [67] numDeriv_2016.8-1.1      withr_3.0.2              BiocManager_1.30.27     
#>  [70] fastmap_1.2.0            callr_3.8.0              digest_0.6.39           
#>  [73] R6_2.6.1                 gridGraphics_0.5-1       biomaRt_2.69.0          
#>  [76] RSQLite_3.53.1           cigarillo_1.3.0          tidyr_1.3.2             
#>  [79] fontLiberation_0.1.0     rtracklayer_1.73.0       prettyunits_1.2.0       
#>  [82] httr_1.4.8               htmlwidgets_1.6.4        S4Arrays_1.13.0         
#>  [85] scatterpie_0.2.6         pkgconfig_2.0.3          gtable_0.3.6            
#>  [88] blob_1.3.0               S7_0.2.2                 XVector_0.53.0          
#>  [91] sys_3.4.3                htmltools_0.5.9          fontBitstreamVera_0.1.1 
#>  [94] scales_1.4.0             png_0.1-9                ggfun_0.2.0             
#>  [97] knitr_1.51               reshape2_1.4.5           rjson_0.2.23            
#> [100] coda_0.19-4.1            nlme_3.1-169             curl_7.1.0              
#> [103] bdsmatrix_1.3-7          cachem_1.1.0             stringr_1.6.0           
#> [106] parallel_4.6.0           restfulr_0.0.16          apeglm_1.35.0           
#> [109] pillar_1.11.1            grid_4.6.0               vctrs_0.7.3             
#> [112] tidydr_0.0.6             dbplyr_2.5.2             cluster_2.1.8.2         
#> [115] evaluate_1.0.5           GenomicFeatures_1.65.0   mvtnorm_1.4-1           
#> [118] cli_3.6.6                locfit_1.5-9.12          compiler_4.6.0          
#> [121] Rsamtools_2.29.0         rlang_1.2.0              crayon_1.5.3            
#> [124] emdbook_1.3.14           ps_1.9.3                 plyr_1.8.9              
#> [127] fs_2.1.0                 ggiraph_0.9.6            stringi_1.8.7           
#> [130] BiocParallel_1.47.0      txdbmaker_1.9.0          Biostrings_2.81.3       
#> [133] lazyeval_0.2.3           GOSemSim_2.39.0          fontquiver_0.2.1        
#> [136] Matrix_1.7-5             hms_1.1.4                patchwork_1.3.2         
#> [139] bit64_4.8.2              ggplot2_4.0.3            KEGGREST_1.53.0         
#> [142] igraph_2.3.2             memoise_2.0.1            bslib_0.11.0            
#> [145] ggtree_4.3.0             bit_4.6.0                ape_5.8-1               
#> [148] gson_0.1.0              
#> 
#> $extra
#> list()
#> 
#> $emma_version
#> [1] "0.99.4"

EMMA structures the EMMA_record attribute (i.e. the recorded provenance information) into a list of elements:

├── EMMA_record
   ├── method         # how the analysis was performed
   │   ├── call
   │   ├── function_name
   │   ├── package_name
   │   ├── package_version
   │   ├── wrapped_function
   │   ├── wrapped_package
   │   └── wrapper
   ├── input         # inputs used for the analysis
   │   └── arguments
   ├── annotation    # annotation context
   │   ├── organism
   │   ├── gene_set_db
   │   └── gene_set_db_version
   ├── timestamp     # when the analysis was run
   ├── session_info  # R session information
   ├── extra         # user-defined additions
   └── emma_version
# get the method record
emma_record$method
#> $call
#> enrichGO(gene = rownames(de_res), universe = gene_universe, keyType = "ENSEMBL", 
#>     OrgDb = org.Hs.eg.db, ont = "BP", pAdjustMethod = "BH", pvalueCutoff = 0.05, 
#>     qvalueCutoff = 0.1)
#> 
#> $function_name
#> [1] "enrichGO"
#> 
#> $package_name
#> [1] "clusterProfiler"
#> 
#> $package_version
#> [1] "4.21.0"
#> 
#> $wrapped_function
#> NULL
#> 
#> $wrapped_package
#> NULL
#> 
#> $wrapper
#> [1] FALSE

With EMMA_run(), we can decide whether we want to save the value of arguments used in our call or not. This can be useful, for example, to avoid unnecessarily increasing the size of the result object. For this, we can use the argument args_form:

fea_res_no_param <- enrichGO(gene = rownames(de_res),
                             universe = gene_universe,
                             keyType = "ENSEMBL",
                             OrgDb = org.Hs.eg.db,
                             ont = "BP",
                             pAdjustMethod = "BH",
                             pvalueCutoff = 0.05,
                             qvalueCutoff = 0.1,
                             readable = TRUE) |> 
  EMMA_run(args_form = "unevaluated") # when we don't want the values stored
                                      # else set to evaluated (default)

# check
EMMA_get_record(fea_res_no_param)
#> $method
#> $method$call
#> enrichGO(gene = rownames(de_res), universe = gene_universe, keyType = "ENSEMBL", 
#>     OrgDb = org.Hs.eg.db, ont = "BP", pAdjustMethod = "BH", pvalueCutoff = 0.05, 
#>     qvalueCutoff = 0.1, readable = TRUE)
#> 
#> $method$function_name
#> [1] "enrichGO"
#> 
#> $method$package_name
#> [1] "clusterProfiler"
#> 
#> $method$package_version
#> [1] "4.21.0"
#> 
#> $method$wrapped_function
#> NULL
#> 
#> $method$wrapped_package
#> NULL
#> 
#> $method$wrapper
#> [1] FALSE
#> 
#> 
#> $input
#> $input$arguments
#> $input$arguments$gene
#> rownames(de_res)
#> 
#> $input$arguments$universe
#> gene_universe
#> 
#> $input$arguments$keyType
#> [1] "ENSEMBL"
#> 
#> $input$arguments$OrgDb
#> org.Hs.eg.db
#> 
#> $input$arguments$ont
#> [1] "BP"
#> 
#> $input$arguments$pAdjustMethod
#> [1] "BH"
#> 
#> $input$arguments$pvalueCutoff
#> [1] 0.05
#> 
#> $input$arguments$qvalueCutoff
#> [1] 0.1
#> 
#> $input$arguments$readable
#> [1] TRUE
#> 
#> 
#> 
#> $annotation
#> $annotation$organism
#> [1] "Homo sapiens"
#> 
#> $annotation$gene_set_db
#> [1] "GO"
#> 
#> $annotation$gene_set_db_version
#> [1] "3.23.1"
#> 
#> 
#> $timestamp
#> [1] "2026-06-10 09:55:59 UTC"
#> 
#> $session_info
#> R version 4.6.0 (2026-04-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.4 LTS
#> 
#> Matrix products: default
#> BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#>  [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: Etc/UTC
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats4    stats     graphics  grDevices utils     datasets  methods  
#> [8] base     
#> 
#> other attached packages:
#>  [1] topGO_2.65.0                SparseM_1.84-2             
#>  [3] GO.db_3.23.1                graph_1.91.0               
#>  [5] mosdef_1.9.0                clusterProfiler_4.21.0     
#>  [7] org.Hs.eg.db_3.23.1         AnnotationDbi_1.75.0       
#>  [9] DESeq2_1.53.0               SummarizedExperiment_1.43.0
#> [11] Biobase_2.73.1              MatrixGenerics_1.25.0      
#> [13] matrixStats_1.5.0           GenomicRanges_1.65.0       
#> [15] Seqinfo_1.3.0               IRanges_2.47.2             
#> [17] S4Vectors_0.51.3            BiocGenerics_0.59.7        
#> [19] generics_0.1.4              macrophage_1.29.0          
#> [21] EMMA_0.99.4                 BiocStyle_2.41.0           
#> 
#> loaded via a namespace (and not attached):
#>   [1] splines_4.6.0            BiocIO_1.23.3            bitops_1.0-9            
#>   [4] ggplotify_0.1.3          filelock_1.0.3           BiasedUrn_2.0.12        
#>   [7] tibble_3.3.1             polyclip_1.10-7          enrichit_0.1.4          
#>  [10] XML_3.99-0.23            lifecycle_1.0.5          httr2_1.2.2             
#>  [13] processx_3.9.0           lattice_0.22-9           MASS_7.3-65             
#>  [16] magrittr_2.0.5           sass_0.4.10              rmarkdown_2.31          
#>  [19] jquerylib_0.1.4          yaml_2.3.12              otel_0.2.0              
#>  [22] ggtangle_0.1.2           DBI_1.3.0                buildtools_1.0.0        
#>  [25] RColorBrewer_1.1-3       abind_1.4-8              purrr_1.2.2             
#>  [28] RCurl_1.98-1.19          yulab.utils_0.2.4        tweenr_2.0.3            
#>  [31] rappdirs_0.3.4           aisdk_1.4.12             gdtools_0.5.1           
#>  [34] enrichplot_1.33.0        ggrepel_0.9.8            tidytree_0.4.7          
#>  [37] maketools_1.3.2          codetools_0.2-20         DelayedArray_0.39.3     
#>  [40] DOSE_4.7.0               DT_0.34.0                ggforce_0.5.0           
#>  [43] tidyselect_1.2.1         aplot_0.2.9              UCSC.utils_1.9.0        
#>  [46] farver_2.1.2             goseq_1.65.0             BiocFileCache_3.3.0     
#>  [49] GenomicAlignments_1.49.0 jsonlite_2.0.0           systemfonts_1.3.2       
#>  [52] bbmle_1.0.25.1           tools_4.6.0              ggnewscale_0.5.2        
#>  [55] progress_1.2.3           treeio_1.37.0            Rcpp_1.1.1-1.1          
#>  [58] glue_1.8.1               SparseArray_1.13.2       BiocBaseUtils_1.15.1    
#>  [61] mgcv_1.9-4               xfun_0.58                geneLenDataBase_1.49.0  
#>  [64] qvalue_2.45.0            GenomeInfoDb_1.49.1      dplyr_1.2.1             
#>  [67] numDeriv_2016.8-1.1      withr_3.0.2              BiocManager_1.30.27     
#>  [70] fastmap_1.2.0            callr_3.8.0              digest_0.6.39           
#>  [73] R6_2.6.1                 gridGraphics_0.5-1       biomaRt_2.69.0          
#>  [76] RSQLite_3.53.1           cigarillo_1.3.0          tidyr_1.3.2             
#>  [79] fontLiberation_0.1.0     rtracklayer_1.73.0       prettyunits_1.2.0       
#>  [82] httr_1.4.8               htmlwidgets_1.6.4        S4Arrays_1.13.0         
#>  [85] scatterpie_0.2.6         pkgconfig_2.0.3          gtable_0.3.6            
#>  [88] blob_1.3.0               S7_0.2.2                 XVector_0.53.0          
#>  [91] sys_3.4.3                htmltools_0.5.9          fontBitstreamVera_0.1.1 
#>  [94] scales_1.4.0             png_0.1-9                ggfun_0.2.0             
#>  [97] knitr_1.51               reshape2_1.4.5           rjson_0.2.23            
#> [100] coda_0.19-4.1            nlme_3.1-169             curl_7.1.0              
#> [103] bdsmatrix_1.3-7          cachem_1.1.0             stringr_1.6.0           
#> [106] parallel_4.6.0           restfulr_0.0.16          apeglm_1.35.0           
#> [109] pillar_1.11.1            grid_4.6.0               vctrs_0.7.3             
#> [112] tidydr_0.0.6             dbplyr_2.5.2             cluster_2.1.8.2         
#> [115] evaluate_1.0.5           GenomicFeatures_1.65.0   mvtnorm_1.4-1           
#> [118] cli_3.6.6                locfit_1.5-9.12          compiler_4.6.0          
#> [121] Rsamtools_2.29.0         rlang_1.2.0              crayon_1.5.3            
#> [124] emdbook_1.3.14           ps_1.9.3                 plyr_1.8.9              
#> [127] fs_2.1.0                 ggiraph_0.9.6            stringi_1.8.7           
#> [130] BiocParallel_1.47.0      txdbmaker_1.9.0          Biostrings_2.81.3       
#> [133] lazyeval_0.2.3           GOSemSim_2.39.0          fontquiver_0.2.1        
#> [136] Matrix_1.7-5             hms_1.1.4                patchwork_1.3.2         
#> [139] bit64_4.8.2              ggplot2_4.0.3            KEGGREST_1.53.0         
#> [142] igraph_2.3.2             memoise_2.0.1            bslib_0.11.0            
#> [145] ggtree_4.3.0             bit_4.6.0                ape_5.8-1               
#> [148] gson_0.1.0              
#> 
#> $extra
#> list()
#> 
#> $emma_version
#> [1] "0.99.4"

We can also choose whether to save the R session information with the record using the argument store_session_info, which defaults to TRUE.

EMMA_explain(): Summarizing recorded information into text

EMMA_explain() generates a human-readable description of the FEA, similar to a Materials and Methods section of a paper, by summarizing the executed call, the parameters, software context, and reference databases used.

EMMA_explain(fea_res, get_citation = TRUE)
#> ℹ You can always complete your text with additional information from `EMMA_get_record()`!
#> ℹ References:
#> Please cite S. Xu (2024) for using clusterProfiler. In addition, please
#> cite G. Yu (2010) when using GOSemSim, G. Yu (2015) when using DOSE and
#> G. Yu (2015) when using ChIPseeker.
#>   G Yu. Thirteen years of clusterProfiler. The Innovation. 2024,
#>   5(6):100722
#>   S Xu, E Hu, Y Cai, Z Xie, X Luo, L Zhan, W Tang, Q Wang, B Liu, R
#>   Wang, W Xie, T Wu, L Xie, G Yu. Using clusterProfiler to characterize
#>   multiomics data. Nature Protocols. 2024, 19(11):3292-3320
#>   T Wu, E Hu, S Xu, M Chen, P Guo, Z Dai, T Feng, L Zhou, W Tang, L
#>   Zhan, X Fu, S Liu, X Bo, and G Yu. clusterProfiler 4.0: A universal
#>   enrichment tool for interpreting omics data. The Innovation. 2021,
#>   2(3):100141
#>   Guangchuang Yu, Li-Gen Wang, Yanyan Han and Qing-Yu He.
#>   clusterProfiler: an R package for comparing biological themes among
#>   gene clusters. OMICS: A Journal of Integrative Biology 2012,
#>   16(5):284-287
#> To see these entries in BibTeX format, use 'format(<citation>,
#> bibtex=TRUE)', or 'toBibtex(.)'.

[1] “Functional Enrichment Analysis was performed using the enrichGO() function from the clusterProfiler package (version 4.21.0) with the GO database (version 3.23.1). A custom background gene set was provided (n = 2000). Multiple testing correction was performed using the BH method.”

EMMA with custom/wrapper functions

You can also use a custom function that you developed, or a wrapper function (from packages such as mosdef). In this case, EMMA_run() will attempt to capture as much metadata as possible:

mosdef_fea_res <- mosdef::run_goseq(de_genes = rownames(de_res),
                                    bg_genes = gene_universe,
                                    mapping = "org.Hs.eg.db",
                                    id = "ensGene",
                                    genome = "hg19") |> 
  EMMA_run(store_session_info = FALSE,
           args_form = "unevaluated")

# quick inspection
EMMA_get_record(mosdef_fea_res)
#> $method
#> $method$call
#> mosdef::run_goseq(de_genes = rownames(de_res), bg_genes = gene_universe, 
#>     mapping = "org.Hs.eg.db", id = "ensGene", genome = "hg19")
#> 
#> $method$function_name
#> [1] "run_goseq"
#> 
#> $method$package_name
#> [1] "mosdef"
#> 
#> $method$package_version
#> [1] "1.9.0"
#> 
#> $method$wrapped_function
#> [1] "goseq"
#> 
#> $method$wrapped_package
#> [1] "goseq"
#> 
#> $method$wrapper
#> [1] TRUE
#> 
#> 
#> $input
#> $input$arguments
#> $input$arguments$de_genes
#> rownames(de_res)
#> 
#> $input$arguments$bg_genes
#> gene_universe
#> 
#> $input$arguments$mapping
#> [1] "org.Hs.eg.db"
#> 
#> $input$arguments$id
#> [1] "ensGene"
#> 
#> $input$arguments$genome
#> [1] "hg19"
#> 
#> 
#> 
#> $annotation
#> $annotation$organism
#> [1] "Homo sapiens"
#> 
#> $annotation$gene_set_db
#> [1] "GO"
#> 
#> $annotation$gene_set_db_version
#> [1] "3.23.1"
#> 
#> 
#> $timestamp
#> [1] "2026-06-10 09:56:03 UTC"
#> 
#> $session_info
#> NULL
#> 
#> $extra
#> list()
#> 
#> $emma_version
#> [1] "0.99.4"
# a custom function (not from a package)
my_custom_function <- function(gene, universe = NULL,
                               ontology = "BP", id_type = "ENTREZID",
                               org_db_name = "org.Hs.eg.db", 
                               organism = "hsapiens") {
  res1 <- mosdef::run_topGO(de_genes = gene,
                            bg_genes = gene_universe,
                            ontology = ontology,
                            gene_id = id_type,
                            mapping = org_db_name,
                            add_gene_to_terms = TRUE)

  res2 <- gprofiler2::gost(query = gene,
                           organism = organism,
                           custom_bg = gene_universe)

  return(list(topGO_res = res1,
              gost_res = res2
  ))
}

# run analysis with EMMA
frankenstein_fea <- my_custom_function(
  gene = rownames(de_res),
  universe = gene_universe,
  ontology = "BP",
  id_type = "ENSEMBL",
  org_db_name = "org.Hs.eg.db",
  organism = "hsapiens"
  ) |> EMMA_run(store_session_info = FALSE,
                args_form = "unevaluated") 

# quick inspection
EMMA_get_record(frankenstein_fea)
#> $method
#> $method$call
#> my_custom_function(gene = rownames(de_res), universe = gene_universe, 
#>     ontology = "BP", id_type = "ENSEMBL", org_db_name = "org.Hs.eg.db", 
#>     organism = "hsapiens")
#> 
#> $method$function_name
#> [1] "my_custom_function"
#> 
#> $method$package_name
#> [1] NA
#> 
#> $method$package_version
#> [1] NA
#> 
#> $method$wrapped_function
#> [1] "run_topGO" "gost"     
#> 
#> $method$wrapped_package
#> [1] "mosdef"     "gprofiler2"
#> 
#> $method$wrapper
#> [1] TRUE
#> 
#> 
#> $input
#> $input$arguments
#> $input$arguments$gene
#> rownames(de_res)
#> 
#> $input$arguments$universe
#> gene_universe
#> 
#> $input$arguments$ontology
#> [1] "BP"
#> 
#> $input$arguments$id_type
#> [1] "ENSEMBL"
#> 
#> $input$arguments$org_db_name
#> [1] "org.Hs.eg.db"
#> 
#> $input$arguments$organism
#> [1] "hsapiens"
#> 
#> 
#> 
#> $annotation
#> $annotation$organism
#> [1] "hsapiens"
#> 
#> $annotation$gene_set_db
#>  [1] "CORUM" "GO:BP" "GO:CC" "GO:MF" "HP"    "HPA"   "KEGG"  "MIRNA" "REAC" 
#> [10] "TF"    "WP"   
#> 
#> $annotation$gene_set_db_version
#> [1] "28.11.2022 Corum 4.1"                                         
#> [2] "annotations: BioMart\nclasses: releases/2026-01-23"           
#> [3] "annotations: 03.2026\nclasses: None"                          
#> [4] "annotations: HPA website: 25-11-06\nclasses: script: 26-01-20"
#> [5] "KEGG FTP Release 2026-03-15"                                  
#> [6] "Release 10.0"                                                 
#> [7] "annotations: BioMart\nclasses: 2026-3-20"                     
#> [8] "annotations: TRANSFAC Release 2025.2\nclasses: v2"            
#> [9] "20260310"                                                     
#> 
#> 
#> $timestamp
#> [1] "2026-06-10 09:56:16 UTC"
#> 
#> $session_info
#> NULL
#> 
#> $extra
#> list()
#> 
#> $emma_version
#> [1] "0.99.4"

EMMA_add_custom_metadata(): Adding extra information

The user can always attach extra metadata that EMMA might not be able to capture automatically. To keep everything organized, we can use EMMA_add_custom_metadata() function

frankenstein_fea2 <- EMMA_add_custom_metadata(res = frankenstein_fea,
                                              extra = list(
                                                wrapped_function_topGO = "runTest",
                                                notes = "any other meaningful info"))

EMMA_get_record(frankenstein_fea2)$extra
#> $wrapped_function_topGO
#> [1] "runTest"
#> 
#> $notes
#> [1] "any other meaningful info"

Since the EMMA_record is attached as attribute to the original results objects, it can be preserved when integrating results into structured containers such as DeeDeeExperiment (Abassi et al. 2026). This enables both FEA results and their associated provenance information to be stored and managed together, facilitating reproducibility, organization, and sharing of complex omics analyses.

dde <- DeeDeeExperiment::DeeDeeExperiment(sce = dds_macrophage,
                                          de_results = IFNg_vs_naive,
                                          enrich_results =  list(
                                            IFNg_vs_naive = fea_res_no_param)
                                          )

fea <- DeeDeeExperiment::getFEA(dde, format = "original")

EMMA_get_record(fea)
#> $method
#> $method$call
#> enrichGO(gene = rownames(de_res), universe = gene_universe, keyType = "ENSEMBL", 
#>     OrgDb = org.Hs.eg.db, ont = "BP", pAdjustMethod = "BH", pvalueCutoff = 0.05, 
#>     qvalueCutoff = 0.1, readable = TRUE)
#> 
#> $method$function_name
#> [1] "enrichGO"
#> 
#> $method$package_name
#> [1] "clusterProfiler"
#> 
#> $method$package_version
#> [1] "4.21.0"
#> 
#> $method$wrapped_function
#> NULL
#> 
#> $method$wrapped_package
#> NULL
#> 
#> $method$wrapper
#> [1] FALSE
#> 
#> 
#> $input
#> $input$arguments
#> $input$arguments$gene
#> rownames(de_res)
#> 
#> $input$arguments$universe
#> gene_universe
#> 
#> $input$arguments$keyType
#> [1] "ENSEMBL"
#> 
#> $input$arguments$OrgDb
#> org.Hs.eg.db
#> 
#> $input$arguments$ont
#> [1] "BP"
#> 
#> $input$arguments$pAdjustMethod
#> [1] "BH"
#> 
#> $input$arguments$pvalueCutoff
#> [1] 0.05
#> 
#> $input$arguments$qvalueCutoff
#> [1] 0.1
#> 
#> $input$arguments$readable
#> [1] TRUE
#> 
#> 
#> 
#> $annotation
#> $annotation$organism
#> [1] "Homo sapiens"
#> 
#> $annotation$gene_set_db
#> [1] "GO"
#> 
#> $annotation$gene_set_db_version
#> [1] "3.23.1"
#> 
#> 
#> $timestamp
#> [1] "2026-06-10 09:55:59 UTC"
#> 
#> $session_info
#> R version 4.6.0 (2026-04-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.4 LTS
#> 
#> Matrix products: default
#> BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#>  [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: Etc/UTC
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats4    stats     graphics  grDevices utils     datasets  methods  
#> [8] base     
#> 
#> other attached packages:
#>  [1] topGO_2.65.0                SparseM_1.84-2             
#>  [3] GO.db_3.23.1                graph_1.91.0               
#>  [5] mosdef_1.9.0                clusterProfiler_4.21.0     
#>  [7] org.Hs.eg.db_3.23.1         AnnotationDbi_1.75.0       
#>  [9] DESeq2_1.53.0               SummarizedExperiment_1.43.0
#> [11] Biobase_2.73.1              MatrixGenerics_1.25.0      
#> [13] matrixStats_1.5.0           GenomicRanges_1.65.0       
#> [15] Seqinfo_1.3.0               IRanges_2.47.2             
#> [17] S4Vectors_0.51.3            BiocGenerics_0.59.7        
#> [19] generics_0.1.4              macrophage_1.29.0          
#> [21] EMMA_0.99.4                 BiocStyle_2.41.0           
#> 
#> loaded via a namespace (and not attached):
#>   [1] splines_4.6.0            BiocIO_1.23.3            bitops_1.0-9            
#>   [4] ggplotify_0.1.3          filelock_1.0.3           BiasedUrn_2.0.12        
#>   [7] tibble_3.3.1             polyclip_1.10-7          enrichit_0.1.4          
#>  [10] XML_3.99-0.23            lifecycle_1.0.5          httr2_1.2.2             
#>  [13] processx_3.9.0           lattice_0.22-9           MASS_7.3-65             
#>  [16] magrittr_2.0.5           sass_0.4.10              rmarkdown_2.31          
#>  [19] jquerylib_0.1.4          yaml_2.3.12              otel_0.2.0              
#>  [22] ggtangle_0.1.2           DBI_1.3.0                buildtools_1.0.0        
#>  [25] RColorBrewer_1.1-3       abind_1.4-8              purrr_1.2.2             
#>  [28] RCurl_1.98-1.19          yulab.utils_0.2.4        tweenr_2.0.3            
#>  [31] rappdirs_0.3.4           aisdk_1.4.12             gdtools_0.5.1           
#>  [34] enrichplot_1.33.0        ggrepel_0.9.8            tidytree_0.4.7          
#>  [37] maketools_1.3.2          codetools_0.2-20         DelayedArray_0.39.3     
#>  [40] DOSE_4.7.0               DT_0.34.0                ggforce_0.5.0           
#>  [43] tidyselect_1.2.1         aplot_0.2.9              UCSC.utils_1.9.0        
#>  [46] farver_2.1.2             goseq_1.65.0             BiocFileCache_3.3.0     
#>  [49] GenomicAlignments_1.49.0 jsonlite_2.0.0           systemfonts_1.3.2       
#>  [52] bbmle_1.0.25.1           tools_4.6.0              ggnewscale_0.5.2        
#>  [55] progress_1.2.3           treeio_1.37.0            Rcpp_1.1.1-1.1          
#>  [58] glue_1.8.1               SparseArray_1.13.2       BiocBaseUtils_1.15.1    
#>  [61] mgcv_1.9-4               xfun_0.58                geneLenDataBase_1.49.0  
#>  [64] qvalue_2.45.0            GenomeInfoDb_1.49.1      dplyr_1.2.1             
#>  [67] numDeriv_2016.8-1.1      withr_3.0.2              BiocManager_1.30.27     
#>  [70] fastmap_1.2.0            callr_3.8.0              digest_0.6.39           
#>  [73] R6_2.6.1                 gridGraphics_0.5-1       biomaRt_2.69.0          
#>  [76] RSQLite_3.53.1           cigarillo_1.3.0          tidyr_1.3.2             
#>  [79] fontLiberation_0.1.0     rtracklayer_1.73.0       prettyunits_1.2.0       
#>  [82] httr_1.4.8               htmlwidgets_1.6.4        S4Arrays_1.13.0         
#>  [85] scatterpie_0.2.6         pkgconfig_2.0.3          gtable_0.3.6            
#>  [88] blob_1.3.0               S7_0.2.2                 XVector_0.53.0          
#>  [91] sys_3.4.3                htmltools_0.5.9          fontBitstreamVera_0.1.1 
#>  [94] scales_1.4.0             png_0.1-9                ggfun_0.2.0             
#>  [97] knitr_1.51               reshape2_1.4.5           rjson_0.2.23            
#> [100] coda_0.19-4.1            nlme_3.1-169             curl_7.1.0              
#> [103] bdsmatrix_1.3-7          cachem_1.1.0             stringr_1.6.0           
#> [106] parallel_4.6.0           restfulr_0.0.16          apeglm_1.35.0           
#> [109] pillar_1.11.1            grid_4.6.0               vctrs_0.7.3             
#> [112] tidydr_0.0.6             dbplyr_2.5.2             cluster_2.1.8.2         
#> [115] evaluate_1.0.5           GenomicFeatures_1.65.0   mvtnorm_1.4-1           
#> [118] cli_3.6.6                locfit_1.5-9.12          compiler_4.6.0          
#> [121] Rsamtools_2.29.0         rlang_1.2.0              crayon_1.5.3            
#> [124] emdbook_1.3.14           ps_1.9.3                 plyr_1.8.9              
#> [127] fs_2.1.0                 ggiraph_0.9.6            stringi_1.8.7           
#> [130] BiocParallel_1.47.0      txdbmaker_1.9.0          Biostrings_2.81.3       
#> [133] lazyeval_0.2.3           GOSemSim_2.39.0          fontquiver_0.2.1        
#> [136] Matrix_1.7-5             hms_1.1.4                patchwork_1.3.2         
#> [139] bit64_4.8.2              ggplot2_4.0.3            KEGGREST_1.53.0         
#> [142] igraph_2.3.2             memoise_2.0.1            bslib_0.11.0            
#> [145] ggtree_4.3.0             bit_4.6.0                ape_5.8-1               
#> [148] gson_0.1.0              
#> 
#> $extra
#> list()
#> 
#> $emma_version
#> [1] "0.99.4"

EMMA_freeze(): Recording the Analysis Environment

EMMA_freeze() records the R environment at the time of analysis by generating a lockfile using renv. By default, the snapshot is created with force = TRUE, allowing the environment to be recorded even when inconsistencies (e.g. version mismatches) are present.

This behavior reflects the goal of preserving the analysis environment as it was used in practice, rather than attempting to enforce a fully consistent state.

if (requireNamespace("renv", quietly = TRUE)) {
  project_path <- tempdir()
  dir.create(project_path)
  EMMA_freeze(project = project_path,
              file = "analysis.lock",
              pkgs = loadedNamespaces(),
              prompt = FALSE,
              force = TRUE)
}
#> [?25l[?25hThe following Bioconductor packages appear to be from a separate Bioconductor release:
#> - IRanges              [installed 2.47.2 != latest 2.46.0]
#> - Biostrings           [installed 2.81.3 != latest 2.80.1]
#> - BiocBaseUtils        [installed 1.15.1 != latest 1.14.2]
#> - BiocGenerics         [installed 0.59.7 != latest 0.58.1]
#> - qvalue               [installed 2.45.0 != latest 2.44.0]
#> - clusterProfiler      [installed 4.21.0 != latest 4.20.0]
#> - Seqinfo              [installed 1.3.0  != latest 1.2.0]
#> - EMMA                 [installed 0.99.4 != latest <NA>]
#> - KEGGREST             [installed 1.53.0 != latest 1.52.0]
#> - UCSC.utils           [installed 1.9.0  != latest 1.8.0]
#> - DOSE                 [installed 4.7.0  != latest 4.6.0]
#> - S4Vectors            [installed 0.51.3 != latest 0.50.1]
#> - SparseArray          [installed 1.13.2 != latest 1.12.2]
#> - macrophage           [installed 1.29.0 != latest 1.28.0]
#> - S4Arrays             [installed 1.13.0 != latest 1.12.0]
#> - BiocFileCache        [installed 3.3.0  != latest 3.2.0]
#> - GenomicRanges        [installed 1.65.0 != latest 1.64.0]
#> - ggtree               [installed 4.3.0  != latest 4.2.0]
#> - DeeDeeExperiment     [installed 1.3.0  != latest 1.2.0]
#> - Rhtslib              [installed 3.9.0  != latest 3.8.0]
#> - SummarizedExperiment [installed 1.43.0 != latest 1.42.0]
#> - GenomicAlignments    [installed 1.49.0 != latest 1.48.0]
#> - BiocIO               [installed 1.23.3 != latest 1.22.0]
#> - mosdef               [installed 1.9.0  != latest 1.8.0]
#> - apeglm               [installed 1.35.0 != latest 1.34.0]
#> - cigarillo            [installed 1.3.0  != latest 1.2.0]
#> - Rsamtools            [installed 2.29.0 != latest 2.28.0]
#> - graph                [installed 1.91.0 != latest 1.90.0]
#> - MatrixGenerics       [installed 1.25.0 != latest 1.24.0]
#> - rtracklayer          [installed 1.73.0 != latest 1.72.0]
#> - txdbmaker            [installed 1.9.0  != latest 1.8.0]
#> - Biobase              [installed 2.73.1 != latest 2.72.0]
#> - BiocParallel         [installed 1.47.0 != latest 1.46.0]
#> - limma                [installed 3.69.2 != latest 3.68.4]
#> - edgeR                [installed 4.11.1 != latest 4.10.1]
#> - geneLenDataBase      [installed 1.49.0 != latest 1.48.0]
#> - GOSemSim             [installed 2.39.0 != latest 2.38.0]
#> - enrichplot           [installed 1.33.0 != latest 1.32.0]
#> - XVector              [installed 0.53.0 != latest 0.52.0]
#> - treeio               [installed 1.37.0 != latest 1.36.1]
#> - DESeq2               [installed 1.53.0 != latest 1.52.0]
#> - SingleCellExperiment [installed 1.35.1 != latest 1.34.0]
#> - GenomicFeatures      [installed 1.65.0 != latest 1.64.0]
#> - GenomeInfoDb         [installed 1.49.1 != latest 1.48.0]
#> - DelayedArray         [installed 0.39.3 != latest 0.38.2]
#> - AnnotationDbi        [installed 1.75.0 != latest 1.74.0]
#> - goseq                [installed 1.65.0 != latest 1.64.0]
#> - BiocStyle            [installed 2.41.0 != latest 2.40.0]
#> - topGO                [installed 2.65.0 != latest 2.64.0]
#> - biomaRt              [installed 2.69.0 != latest 2.68.0]
#> renv may be unable to restore these packages.
#> Bioconductor version: 3.23
#> 
#> The following required packages are not installed:
#> - BiocVersion  [required by AnnotationDbi, apeglm, Biobase, and 49 others]
#> Consider reinstalling these packages before snapshotting the lockfile.
#> 
#> The following package(s) will be updated in the lockfile:
#> 
#> # Bioconductor ---------------------------------------------------------------
#> - GO.db                  [* -> 3.23.1]
#> - org.Hs.eg.db           [* -> 3.23.1]
#> 
#> # Bioconductor 3.24 ----------------------------------------------------------
#> - geneLenDataBase        [* -> 1.49.0]
#> - macrophage             [* -> 1.29.0]
#> 
#> # Local ----------------------------------------------------------------------
#> - buildtools             [* -> 1.0.0]
#> 
#> # RSPM -----------------------------------------------------------------------
#> - abind                  [* -> 1.4-8]
#> - aisdk                  [* -> 1.4.12]
#> - ape                    [* -> 5.8-1]
#> - aplot                  [* -> 0.2.9]
#> - askpass                [* -> 1.2.1]
#> - base64enc              [* -> 0.1-6]
#> - bbmle                  [* -> 1.0.25.1]
#> - bdsmatrix              [* -> 1.3-7]
#> - BH                     [* -> 1.90.0-1]
#> - BiasedUrn              [* -> 2.0.12]
#> - BiocManager            [* -> 1.30.27]
#> - bit                    [* -> 4.6.0]
#> - bit64                  [* -> 4.8.2]
#> - bitops                 [* -> 1.0-9]
#> - blob                   [* -> 1.3.0]
#> - bookdown               [* -> 0.46]
#> - brio                   [* -> 1.1.5]
#> - bslib                  [* -> 0.11.0]
#> - cachem                 [* -> 1.1.0]
#> - callr                  [* -> 3.8.0]
#> - cffr                   [* -> 1.4.0]
#> - cli                    [* -> 3.6.6]
#> - cluster                [* -> 2.1.8.2]
#> - coda                   [* -> 0.19-4.1]
#> - codetools              [* -> 0.2-20]
#> - commonmark             [* -> 2.0.0]
#> - cpp11                  [* -> 0.5.5]
#> - crayon                 [* -> 1.5.3]
#> - credentials            [* -> 2.0.3]
#> - crosstalk              [* -> 1.2.2]
#> - curl                   [* -> 7.1.0]
#> - data.table             [* -> 1.18.4]
#> - DBI                    [* -> 1.3.0]
#> - dbplyr                 [* -> 2.5.2]
#> - desc                   [* -> 1.4.3]
#> - digest                 [* -> 0.6.39]
#> - downlit                [* -> 0.4.5]
#> - dplyr                  [* -> 1.2.1]
#> - DT                     [* -> 0.34.0]
#> - emdbook                [* -> 1.3.14]
#> - enrichit               [* -> 0.1.4]
#> - evaluate               [* -> 1.0.5]
#> - fansi                  [* -> 1.0.7]
#> - farver                 [* -> 2.1.2]
#> - fastmap                [* -> 1.2.0]
#> - filelock               [* -> 1.0.3]
#> - fontawesome            [* -> 0.5.3]
#> - fontBitstreamVera      [* -> 0.1.1]
#> - fontLiberation         [* -> 0.1.0]
#> - fontquiver             [* -> 0.2.1]
#> - formatR                [* -> 1.14]
#> - fs                     [* -> 2.1.0]
#> - futile.logger          [* -> 1.4.9]
#> - futile.options         [* -> 1.0.1]
#> - gdtools                [* -> 0.5.1]
#> - generics               [* -> 0.1.4]
#> - gert                   [* -> 2.3.1]
#> - ggforce                [* -> 0.5.0]
#> - ggfun                  [* -> 0.2.0]
#> - ggiraph                [* -> 0.9.6]
#> - ggnewscale             [* -> 0.5.2]
#> - ggplot2                [* -> 4.0.3]
#> - ggplotify              [* -> 0.1.3]
#> - ggrepel                [* -> 0.9.8]
#> - ggtangle               [* -> 0.1.2]
#> - gh                     [* -> 1.6.0]
#> - gitcreds               [* -> 0.1.2]
#> - glue                   [* -> 1.8.1]
#> - gprofiler2             [* -> 0.2.4]
#> - gridExtra              [* -> 2.3]
#> - gridGraphics           [* -> 0.5-1]
#> - gson                   [* -> 0.1.0]
#> - gtable                 [* -> 0.3.6]
#> - highr                  [* -> 0.12]
#> - hms                    [* -> 1.1.4]
#> - htmltools              [* -> 0.5.9]
#> - htmlwidgets            [* -> 1.6.4]
#> - httr                   [* -> 1.4.8]
#> - httr2                  [* -> 1.2.2]
#> - igraph                 [* -> 2.3.2]
#> - ini                    [* -> 0.3.1]
#> - isoband                [* -> 0.3.0]
#> - jquerylib              [* -> 0.1.4]
#> - jsonlite               [* -> 2.0.0]
#> - jsonvalidate           [* -> 1.5.0]
#> - katex                  [* -> 1.5.0]
#> - knitr                  [* -> 1.51]
#> - labeling               [* -> 0.4.3]
#> - lambda.r               [* -> 1.2.4]
#> - later                  [* -> 1.4.8]
#> - lattice                [* -> 0.22-9]
#> - lazyeval               [* -> 0.2.3]
#> - lifecycle              [* -> 1.0.5]
#> - litedown               [* -> 0.9]
#> - locfit                 [* -> 1.5-9.12]
#> - lubridate              [* -> 1.9.5]
#> - magrittr               [* -> 2.0.5]
#> - maketools              [* -> 1.3.2]
#> - markdown               [* -> 2.0]
#> - MASS                   [* -> 7.3-65]
#> - Matrix                 [* -> 1.7-5]
#> - matrixStats            [* -> 1.5.0]
#> - memoise                [* -> 2.0.1]
#> - mgcv                   [* -> 1.9-4]
#> - mime                   [* -> 0.13]
#> - mvtnorm                [* -> 1.4-1]
#> - nlme                   [* -> 3.1-169]
#> - numDeriv               [* -> 2016.8-1.1]
#> - openssl                [* -> 2.4.2]
#> - otel                   [* -> 0.2.0]
#> - pak                    [* -> 0.10.0]
#> - patchwork              [* -> 1.3.2]
#> - pdftools               [* -> 3.9.0]
#> - pillar                 [* -> 1.11.1]
#> - pkgconfig              [* -> 2.0.3]
#> - plotly                 [* -> 4.12.0]
#> - plyr                   [* -> 1.8.9]
#> - png                    [* -> 0.1-9]
#> - polyclip               [* -> 1.10-7]
#> - postdoc                [* -> 1.4.2]
#> - prettyunits            [* -> 1.2.0]
#> - prismjs                [* -> 2.1.0]
#> - processx               [* -> 3.9.0]
#> - progress               [* -> 1.2.3]
#> - promises               [* -> 1.5.0]
#> - ps                     [* -> 1.9.3]
#> - purrr                  [* -> 1.2.2]
#> - qpdf                   [* -> 1.4.1]
#> - R6                     [* -> 2.6.1]
#> - rappdirs               [* -> 0.3.4]
#> - RColorBrewer           [* -> 1.1-3]
#> - Rcpp                   [* -> 1.1.1-1.1]
#> - RcppArmadillo          [* -> 15.2.7-1]
#> - RcppEigen              [* -> 0.3.4.0.2]
#> - RcppNumerical          [* -> 0.7-0]
#> - RCurl                  [* -> 1.98-1.19]
#> - remotes                [* -> 2.5.0]
#> - renv                   [* -> 1.2.3]
#> - reshape2               [* -> 1.4.5]
#> - restfulr               [* -> 0.0.16]
#> - rjson                  [* -> 0.2.23]
#> - rlang                  [* -> 1.2.0]
#> - rmarkdown              [* -> 2.31]
#> - RSQLite                [* -> 3.53.1]
#> - rstudioapi             [* -> 0.18.0]
#> - S7                     [* -> 0.2.2]
#> - sass                   [* -> 0.4.10]
#> - scales                 [* -> 1.4.0]
#> - scatterpie             [* -> 0.2.6]
#> - snow                   [* -> 0.4-4]
#> - SparseM                [* -> 1.84-2]
#> - statmod                [* -> 1.5.2]
#> - stringi                [* -> 1.8.7]
#> - stringr                [* -> 1.6.0]
#> - sys                    [* -> 3.4.3]
#> - systemfonts            [* -> 1.3.2]
#> - tibble                 [* -> 3.3.1]
#> - tidydr                 [* -> 0.0.6]
#> - tidyr                  [* -> 1.3.2]
#> - tidyselect             [* -> 1.2.1]
#> - tidytree               [* -> 0.4.7]
#> - timechange             [* -> 0.4.0]
#> - tinytex                [* -> 0.59]
#> - tweenr                 [* -> 2.0.3]
#> - unix                   [* -> 1.6.0]
#> - utf8                   [* -> 1.2.6]
#> - V8                     [* -> 8.2.0]
#> - vctrs                  [* -> 0.7.3]
#> - viridisLite            [* -> 0.4.3]
#> - withr                  [* -> 3.0.2]
#> - writexl                [* -> 1.5.4]
#> - xfun                   [* -> 0.58]
#> - XML                    [* -> 3.99-0.23]
#> - xml2                   [* -> 1.5.2]
#> - yaml                   [* -> 2.3.12]
#> - yulab.utils            [* -> 0.2.4]
#> - zip                    [* -> 2.3.3]
#> 
#> # https://bioc.r-universe.dev ------------------------------------------------
#> - AnnotationDbi          [* -> 1.75.0]
#> - apeglm                 [* -> 1.35.0]
#> - Biobase                [* -> 2.73.1]
#> - BiocBaseUtils          [* -> 1.15.1]
#> - BiocFileCache          [* -> 3.3.0]
#> - BiocGenerics           [* -> 0.59.7]
#> - BiocIO                 [* -> 1.23.3]
#> - BiocParallel           [* -> 1.47.0]
#> - BiocStyle              [* -> 2.41.0]
#> - biomaRt                [* -> 2.69.0]
#> - Biostrings             [* -> 2.81.3]
#> - cigarillo              [* -> 1.3.0]
#> - clusterProfiler        [* -> 4.21.0]
#> - DeeDeeExperiment       [* -> 1.3.0]
#> - DelayedArray           [* -> 0.39.3]
#> - DESeq2                 [* -> 1.53.0]
#> - DOSE                   [* -> 4.7.0]
#> - edgeR                  [* -> 4.11.1]
#> - enrichplot             [* -> 1.33.0]
#> - GenomeInfoDb           [* -> 1.49.1]
#> - GenomicAlignments      [* -> 1.49.0]
#> - GenomicFeatures        [* -> 1.65.0]
#> - GenomicRanges          [* -> 1.65.0]
#> - ggtree                 [* -> 4.3.0]
#> - GOSemSim               [* -> 2.39.0]
#> - goseq                  [* -> 1.65.0]
#> - graph                  [* -> 1.91.0]
#> - IRanges                [* -> 2.47.2]
#> - KEGGREST               [* -> 1.53.0]
#> - limma                  [* -> 3.69.2]
#> - MatrixGenerics         [* -> 1.25.0]
#> - mosdef                 [* -> 1.9.0]
#> - qvalue                 [* -> 2.45.0]
#> - Rhtslib                [* -> 3.9.0]
#> - Rsamtools              [* -> 2.29.0]
#> - rtracklayer            [* -> 1.73.0]
#> - S4Arrays               [* -> 1.13.0]
#> - S4Vectors              [* -> 0.51.3]
#> - Seqinfo                [* -> 1.3.0]
#> - SingleCellExperiment   [* -> 1.35.1]
#> - SparseArray            [* -> 1.13.2]
#> - SummarizedExperiment   [* -> 1.43.0]
#> - topGO                  [* -> 2.65.0]
#> - treeio                 [* -> 1.37.0]
#> - txdbmaker              [* -> 1.9.0]
#> - UCSC.utils             [* -> 1.9.0]
#> - XVector                [* -> 0.53.0]
#> 
#> # https://biocstaging.r-universe.dev -----------------------------------------
#> - EMMA                   [* -> 0.99.4]
#> 
#> The version of R recorded in the lockfile will be updated:
#> - R                      [* -> 4.6.0]
#> 
#> - Lockfile written to "/tmp/RtmpiJ4sPQ/analysis.lock".

EMMA with iterative workflows

In real-world analyses, multiple FEA results from different contrasts are often analyzed in parallel This can be conveniently handled using iterative approaches such as lapply().

fea_res_list <- lapply(de_list, function(dea){
  #### perform fea with EMMA_run ####
  enrichGO(gene = rownames(dea),
           universe = gene_universe,
           keyType = "ENSEMBL",
           OrgDb = org.Hs.eg.db,
           ont = "BP",
           pAdjustMethod = "BH",
           pvalueCutoff = 0.05,
           qvalueCutoff = 0.1,
           readable = TRUE) |> 
    EMMA_run()
})

#### print the metadata summary for each contrast ####
invisible(lapply(names(fea_res_list), function(nm) {
  cat("\n###", nm)
  EMMA_show(fea_res_list[[nm]])
}))
#> 
#> ### IFNg_vs_naive
#> Number of Pathways: 67 
#> Call: enrichGO(gene = rownames(dea), universe = gene_universe, keyType = "ENSEMBL",      OrgDb = org.Hs.eg.db, ont = "BP", pAdjustMethod = "BH", pvalueCutoff = 0.05,      qvalueCutoff = 0.1, readable = TRUE)  
#> Wrapper: FALSE  
#> Package: clusterProfiler v. 4.21.0  
#> Organism: Homo sapiens  
#> Gene set library: GO  
#> Gene set library version: 3.23.1  
#> 
#> 
#> ### SL1344_vs_naive
#> Number of Pathways: 87 
#> Call: enrichGO(gene = rownames(dea), universe = gene_universe, keyType = "ENSEMBL",      OrgDb = org.Hs.eg.db, ont = "BP", pAdjustMethod = "BH", pvalueCutoff = 0.05,      qvalueCutoff = 0.1, readable = TRUE)  
#> Wrapper: FALSE  
#> Package: clusterProfiler v. 4.21.0  
#> Organism: Homo sapiens  
#> Gene set library: GO  
#> Gene set library version: 3.23.1
#### add more info to the metadata ####
fea_res_list <- setNames(lapply(names(fea_res_list), function(nm) {
  EMMA_add_custom_metadata(fea_res_list[[nm]], extra = list(contrast_name = nm))
  }), 
names(fea_res_list))

#### get the raw metadata ####
record_list <- list()

record_list <- setNames(lapply(names(fea_res_list), function(mn){
  EMMA_get_record(fea_res_list[[mn]])
  }),
names(fea_res_list))

record_list$SL1344_vs_naive$extra
#> $contrast_name
#> [1] "SL1344_vs_naive"
record_list$SL1344_vs_naive$method$package_name
#> [1] "clusterProfiler"

Supported methods and future extensions

EMMA currently provides metadata capture support for several commonly used FEA tools, including methods from clusterProfiler, gprofiler2, and related wrappers/custom functions such as mosdef.

EMMA is designed to be extensible, and support for additional FEA methods and packages will continue to expand over time.

Session info

sessionInfo()
#> R version 4.6.0 (2026-04-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.4 LTS
#> 
#> Matrix products: default
#> BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#>  [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: Etc/UTC
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats4    stats     graphics  grDevices utils     datasets  methods  
#> [8] base     
#> 
#> other attached packages:
#>  [1] topGO_2.65.0                SparseM_1.84-2             
#>  [3] GO.db_3.23.1                graph_1.91.0               
#>  [5] mosdef_1.9.0                clusterProfiler_4.21.0     
#>  [7] org.Hs.eg.db_3.23.1         AnnotationDbi_1.75.0       
#>  [9] DESeq2_1.53.0               SummarizedExperiment_1.43.0
#> [11] Biobase_2.73.1              MatrixGenerics_1.25.0      
#> [13] matrixStats_1.5.0           GenomicRanges_1.65.0       
#> [15] Seqinfo_1.3.0               IRanges_2.47.2             
#> [17] S4Vectors_0.51.3            BiocGenerics_0.59.7        
#> [19] generics_0.1.4              macrophage_1.29.0          
#> [21] EMMA_0.99.4                 BiocStyle_2.41.0           
#> 
#> loaded via a namespace (and not attached):
#>   [1] splines_4.6.0               BiocIO_1.23.3              
#>   [3] bitops_1.0-9                ggplotify_0.1.3            
#>   [5] filelock_1.0.3              BiasedUrn_2.0.12           
#>   [7] tibble_3.3.1                polyclip_1.10-7            
#>   [9] enrichit_0.1.4              XML_3.99-0.23              
#>  [11] lifecycle_1.0.5             httr2_1.2.2                
#>  [13] edgeR_4.11.1                processx_3.9.0             
#>  [15] lattice_0.22-9              MASS_7.3-65                
#>  [17] magrittr_2.0.5              limma_3.69.2               
#>  [19] plotly_4.12.0               sass_0.4.10                
#>  [21] rmarkdown_2.31              jquerylib_0.1.4            
#>  [23] yaml_2.3.12                 otel_0.2.0                 
#>  [25] ggtangle_0.1.2              DBI_1.3.0                  
#>  [27] buildtools_1.0.0            RColorBrewer_1.1-3         
#>  [29] abind_1.4-8                 purrr_1.2.2                
#>  [31] RCurl_1.98-1.19             yulab.utils_0.2.4          
#>  [33] tweenr_2.0.3                rappdirs_0.3.4             
#>  [35] aisdk_1.4.12                gdtools_0.5.1              
#>  [37] enrichplot_1.33.0           ggrepel_0.9.8              
#>  [39] tidytree_0.4.7              maketools_1.3.2            
#>  [41] codetools_0.2-20            DelayedArray_0.39.3        
#>  [43] DOSE_4.7.0                  DT_0.34.0                  
#>  [45] ggforce_0.5.0               tidyselect_1.2.1           
#>  [47] aplot_0.2.9                 UCSC.utils_1.9.0           
#>  [49] farver_2.1.2                goseq_1.65.0               
#>  [51] BiocFileCache_3.3.0         GenomicAlignments_1.49.0   
#>  [53] jsonlite_2.0.0              systemfonts_1.3.2          
#>  [55] bbmle_1.0.25.1              DeeDeeExperiment_1.3.0     
#>  [57] tools_4.6.0                 ggnewscale_0.5.2           
#>  [59] progress_1.2.3              treeio_1.37.0              
#>  [61] Rcpp_1.1.1-1.1              glue_1.8.1                 
#>  [63] SparseArray_1.13.2          BiocBaseUtils_1.15.1       
#>  [65] mgcv_1.9-4                  xfun_0.58                  
#>  [67] geneLenDataBase_1.49.0      qvalue_2.45.0              
#>  [69] GenomeInfoDb_1.49.1         dplyr_1.2.1                
#>  [71] numDeriv_2016.8-1.1         withr_3.0.2                
#>  [73] BiocManager_1.30.27         fastmap_1.2.0              
#>  [75] callr_3.8.0                 digest_0.6.39              
#>  [77] R6_2.6.1                    gridGraphics_0.5-1         
#>  [79] biomaRt_2.69.0              RSQLite_3.53.1             
#>  [81] cigarillo_1.3.0             tidyr_1.3.2                
#>  [83] renv_1.2.3                  data.table_1.18.4          
#>  [85] fontLiberation_0.1.0        rtracklayer_1.73.0         
#>  [87] prettyunits_1.2.0           httr_1.4.8                 
#>  [89] htmlwidgets_1.6.4           S4Arrays_1.13.0            
#>  [91] scatterpie_0.2.6            pkgconfig_2.0.3            
#>  [93] gtable_0.3.6                blob_1.3.0                 
#>  [95] S7_0.2.2                    SingleCellExperiment_1.35.1
#>  [97] XVector_0.53.0              sys_3.4.3                  
#>  [99] htmltools_0.5.9             fontBitstreamVera_0.1.1    
#> [101] scales_1.4.0                png_0.1-9                  
#> [103] ggfun_0.2.0                 knitr_1.51                 
#> [105] reshape2_1.4.5              rjson_0.2.23               
#> [107] coda_0.19-4.1               nlme_3.1-169               
#> [109] curl_7.1.0                  bdsmatrix_1.3-7            
#> [111] cachem_1.1.0                stringr_1.6.0              
#> [113] parallel_4.6.0              restfulr_0.0.16            
#> [115] apeglm_1.35.0               pillar_1.11.1              
#> [117] grid_4.6.0                  vctrs_0.7.3                
#> [119] tidydr_0.0.6                dbplyr_2.5.2               
#> [121] cluster_2.1.8.2             evaluate_1.0.5             
#> [123] GenomicFeatures_1.65.0      mvtnorm_1.4-1              
#> [125] cli_3.6.6                   locfit_1.5-9.12            
#> [127] compiler_4.6.0              Rsamtools_2.29.0           
#> [129] rlang_1.2.0                 crayon_1.5.3               
#> [131] gprofiler2_0.2.4            emdbook_1.3.14             
#> [133] ps_1.9.3                    plyr_1.8.9                 
#> [135] fs_2.1.0                    writexl_1.5.4              
#> [137] ggiraph_0.9.6               stringi_1.8.7              
#> [139] viridisLite_0.4.3           BiocParallel_1.47.0        
#> [141] txdbmaker_1.9.0             Biostrings_2.81.3          
#> [143] lazyeval_0.2.3              GOSemSim_2.39.0            
#> [145] fontquiver_0.2.1            Matrix_1.7-5               
#> [147] hms_1.1.4                   patchwork_1.3.2            
#> [149] bit64_4.8.2                 ggplot2_4.0.3              
#> [151] statmod_1.5.2               KEGGREST_1.53.0            
#> [153] igraph_2.3.2                memoise_2.0.1              
#> [155] bslib_0.11.0                ggtree_4.3.0               
#> [157] bit_4.6.0                   ape_5.8-1                  
#> [159] gson_0.1.0

References

Abassi, Najla, Lea Schwarz, Edoardo Filippi, and Federico Marini. 2026. “DeeDeeExperiment: Building an Infrastructure for Integrating and Managing Omics Data Analysis Results in r/Bioconductor.” Bioinformatics 42 (4). https://doi.org/10.1093/bioinformatics/btag157.
Alasoo, Kaur, Julia Rodrigues, Subhankar Mukhopadhyay, et al. 2018. Shared genetic effects on chromatin and gene expression indicate a role for enhancer priming in immune response.” Nature Genetics 50 (3): 424–31. https://doi.org/10.1038/s41588-018-0046-7.
Brazma, Alvis, Pascal Hingamp, John Quackenbush, et al. 2001. “Minimum Information about a Microarray Experiment (MIAME)—Toward Standards for Microarray Data.” Nature Genetics 29 (4): 365–71. https://doi.org/10.1038/ng1201-365.
Khatri, Purvesh, Marina Sirota, and Atul J. Butte. 2012. “Ten Years of Pathway Analysis: Current Approaches and Outstanding Challenges.” PLoS Computational Biology 8 (2): e1002375. https://doi.org/10.1371/journal.pcbi.1002375.
Subramanian, Aravind, Pablo Tamayo, Vamsi K. Mootha, et al. 2005. “Gene Set Enrichment Analysis: A Knowledge-Based Approach for Interpreting Genome-Wide Expression Profiles.” Proceedings of the National Academy of Sciences 102 (43): 15545–50. https://doi.org/10.1073/pnas.0506580102.
Wijesooriya, Kaumadi, Sameer A. Jadaan, Kaushalya L. Perera, Tanuveer Kaur, and Mark Ziemann. 2022. “Urgent Need for Consistent Standards in Functional Enrichment Analysis.” PLOS Computational Biology 18 (3): e1009935. https://doi.org/10.1371/journal.pcbi.1009935.