Detects the species and the 'Ensembl' < https://www.ensembl.org> or 'GENCODE' < https://www.gencodegenes.org> annotation release associated with a set of gene or transcript identifiers by scoring them against a bundled fingerprint of each release. Identifiers are then converted to gene names using the matching release. Gene symbols that spreadsheet software turned into dates or numbers ('SEPT9' to '9-Sep') are restored to the spelling of the chosen release. Also retrieves genes by class (mitochondrial, sex-linked, protein-coding, ribosomal, transfer RNA, long non-coding RNA), exon-union gene lengths, 'Entrez' cross-references, and orthologs in another species from 'Ensembl Compara'.

Genevintage supports easy conversion between gene ids and gene names for any genome and GTF build.
ids <- c("ENSG00000141510.16", "ENSG00000284733", "ENSG00000012048")
Using a reverse index, genevintage can detect the actual release:
head(DetectRelease(ids), 3)
#> species source release assembly feasible dist n_index
#> 1 homo_sapiens gencode 26 38 TRUE 9.6486 58219
#> 2 homo_sapiens gencode 27 38 TRUE 9.6505 58288
#> 3 homo_sapiens gencode 28 38 TRUE 9.6534 58381
Gene names can be retrieved with a single command:
GeneID2Name(ids)
#> Best fingerprint match: homo_sapiens, gencode release 26 (assembly 38) -- 79 candidates score within 10%
#> [1] "TP53" "ENSG00000284733" "BRCA1"
DetectSpeciesNames(c("TP53", "BRCA1", "MYC"), idx) # idx <- BuildSymbolIndex(...); detect from symbols
m <- GeneID2Name(m) # rownames(m), id -> name
CorrectGeneNames(c("9-Sep", "1-Dec"), species = "human", release = 116) # undo Excel's date/float autocorrect
GeneIDs(c("TP53", "BRCA1"), species = "human") # name -> id, and back
AnnotateGenes(rownames(counts)) # full record: symbol, biotype, coords
MitoGenes(rownames(counts)); SexGenes(species = "human"); RibosomalGenes(species = "human")
SexGenes(species = "chicken", which = "W") # per-clade: X/Y, Z/W, or none (yeast)
GenesByBiotype("lncRNA", species = "mouse") # any Ensembl/GENCODE biotype
HemoglobinGenes(species = "human"); MHCGenes(species = "mouse")
CompareReleases("human", from = 110, to = 116) # added / removed / renamed genes
Orthologs(ids, to = "mouse") # common names resolve too
Every function above is also available under its snake_case name
(GeneID2Name() is also geneid2name(), MitoGenes() is also mito_genes(),
and so on) for callers who prefer that style.
# install.packages("remotes")
remotes::install_github("saketlab/genevintage")