The Molecular Signatures Database (MSigDB) in a tidy data frame.
This is the updated version of the archived repo of @stephenturner
Current version: v2026.1.
Important Notices
- MSigDB v2026.1 is based on gene annotation data from Ensembl Release 115.
- Human release notes: https://docs.gsea-msigdb.org/#MSigDB/Release_Notes/MSigDB_2026.1.Hs/
- Mouse release notes: https://docs.gsea-msigdb.org/#MSigDB/Release_Notes/MSigDB_2026.1.Mm/
# Install pak if you don't already have it
# install_github() was deprecated in devtools 2.5.0.
install.packages("pak")
# Just get the data
pak::pak("toledoem/msigdf")
# Get the data and the suggested packages used by the vignettes
pak::pak("toledoem/msigdf", dependencies = TRUE)| Object | Columns | Description |
|---|---|---|
msigdf.human |
category_code, category_subcode, geneset, symbol |
Human gene sets (h, c1-c9) |
msigdf.mouse |
category_code, category_subcode, geneset, symbol |
Mouse gene sets (mh, m1-m8) |
msigdf.urls |
category_code, category_subcode, geneset, url |
MSigDB page for each human gene set |
msigdf.mouse.urls |
category_code, category_subcode, geneset, url |
MSigDB page for each mouse gene set |
Hallmark is h for human and mh for mouse. KEGG gene sets are human-only.
See the package vignette for more examples, or Using msigdf with enrichment tools to feed these tables into fgsea or clusterProfiler.
library(dplyr)
library(msigdf)
#vignette("msigdf")msigdf.human %>%
filter(category_code=="h") %>%
head# A tibble: 6 x 4
category_code category_subcode geneset symbol
<chr> <chr> <chr> <chr>
1 h all HALLMARK_TNFA_SIGNALING_VIA_NFKB JUNB
2 h all HALLMARK_TNFA_SIGNALING_VIA_NFKB CXCL2
3 h all HALLMARK_TNFA_SIGNALING_VIA_NFKB ATF3
4 h all HALLMARK_TNFA_SIGNALING_VIA_NFKB NFKBIA
5 h all HALLMARK_TNFA_SIGNALING_VIA_NFKB TNFAIP3
6 h all HALLMARK_TNFA_SIGNALING_VIA_NFKB PTGS2
> msigdf.human %>%
filter(geneset=="KEGG_NON_HOMOLOGOUS_END_JOINING") %>%
group_by(category_subcode) %>%
top_n(n = 10)Since now there are legacy and KEGG gene sets
Selecting by symbol
# A tibble: 20 × 4
# Groups: category_subcode [2]
category_code category_subcode geneset symbol
<chr> <chr> <chr> <chr>
1 c2 cp.kegg_legacy KEGG_NON_HOMOLOGOUS_END_JOINING LIG4
2 c2 cp.kegg_legacy KEGG_NON_HOMOLOGOUS_END_JOINING MRE11
3 c2 cp.kegg_legacy KEGG_NON_HOMOLOGOUS_END_JOINING NHEJ1
4 c2 cp.kegg_legacy KEGG_NON_HOMOLOGOUS_END_JOINING POLL
5 c2 cp.kegg_legacy KEGG_NON_HOMOLOGOUS_END_JOINING POLM
6 c2 cp.kegg_legacy KEGG_NON_HOMOLOGOUS_END_JOINING PRKDC
7 c2 cp.kegg_legacy KEGG_NON_HOMOLOGOUS_END_JOINING RAD50
8 c2 cp.kegg_legacy KEGG_NON_HOMOLOGOUS_END_JOINING XRCC4
9 c2 cp.kegg_legacy KEGG_NON_HOMOLOGOUS_END_JOINING XRCC5
10 c2 cp.kegg_legacy KEGG_NON_HOMOLOGOUS_END_JOINING XRCC6
11 c2 cp KEGG_NON_HOMOLOGOUS_END_JOINING LIG4
12 c2 cp KEGG_NON_HOMOLOGOUS_END_JOINING MRE11
13 c2 cp KEGG_NON_HOMOLOGOUS_END_JOINING NHEJ1
14 c2 cp KEGG_NON_HOMOLOGOUS_END_JOINING POLL
15 c2 cp KEGG_NON_HOMOLOGOUS_END_JOINING POLM
16 c2 cp KEGG_NON_HOMOLOGOUS_END_JOINING PRKDC
17 c2 cp KEGG_NON_HOMOLOGOUS_END_JOINING RAD50
18 c2 cp KEGG_NON_HOMOLOGOUS_END_JOINING XRCC4
19 c2 cp KEGG_NON_HOMOLOGOUS_END_JOINING XRCC5
20 c2 cp KEGG_NON_HOMOLOGOUS_END_JOINING XRCC6
Code for building this data is in data-raw/. Update data-raw/data_url.yml with the new MSigDB version and URLs — the top-level version: key drives every version-dependent pattern in both scripts, so it is the only place a release bump needs to be made.
- Download the GMT files (run from the repository root):
bash data-raw/get_gmt.shThe script verifies that every file listed in the YAML was downloaded and that each carries the declared version, so a stale URL list fails loudly instead of silently producing empty data frames.
- Build the data frames and save to
data/:
Rscript data-raw/msigdf.R- Regenerate documentation and check the package:
devtools::document()
devtools::check()See the package vignette for more examples, and Using msigdf with enrichment tools for fgsea and clusterProfiler recipes.
