# BioMart Ensembl id imperfect retrieval

I have a list of gene symbols:

c("cd45", "Tmem119", "CD11b", "P2Yr12", "Csf1r", "Bst2", "Cd74",
"Cx3cr1", "Trem2", "Lyz2", "GLAST", "GFAP", "ALDH1L1", "Aldoc", "Aqp4",
"Glul", "S100a", "Olig1", "Olig2", "Olig3", "Mbp", "Pdgfra", "Pecam",
"Cldn5", "Cldn10", "Epas1", "Crip1")


If I feed it to BioMart to get ensembl ids:

mart <- useDataset("mmusculus_gene_ensembl", useMart("ensembl"))
list <- getBM(filters= "mgi_symbol", attributes= c("ensembl_gene_id",
"mgi_symbol","description"),values=symbols,mart= mart)


the following genes are missed:

"cd45"   "cd11b"  "p2yr12" "glast"  "s100a"  "pecam"


All of them are pretty well-known genes, and I can manually find their ensembl ids by googling it, for instance:

http://www.informatics.jax.org/marker/MGI:97810

I tried supplying aliases, but it does not change the output. So, from my understanding BioMart is not working properly either because I am doing something wrong here or because BioMart itself is not a good tool to use. Is there a better way of getting the mapping that would map all of the gene symbols?

The genes that are missed are probably not official mgi symbols.

You might wanna look them up at mgi:

cd45 -> Ptprc

cd11b -> Itgam

p2ry12 -> P2ry12 (?) (CAPS sensitive?)

glast -> Slc1a3

s100a -> S100a1

pecam -> Pecam1 (?)


I suspect biomaRt is not the problem here, the only better way I can come up with is to download the ENSEMBL annotation (GTF) file, and get the symbol out of this annotation with AWK or in R.

Here an example in R, since you don't want to use AWK:

file <- read.table("Mus_musculus.GRCm38.78.gtf", sep = "\t", comment.char = "#")

exons <- subset(file, V3 == 'exon')

V9 <- file[,"V9"]

ensembl_names <- sub("gene_id ","",V9)

split <- strsplit(ensembl_names, ";")

splitting <- sapply(split, function(x) x[1])

split_symbol <- strsplit(ensembl_names, "gene_name ")

splitting_symbol <- sapply(split_symbol, function(x) x[2])

splitting_symbol2 <- strsplit(splitting_symbol, "; ")

symbol_names <- sapply(splitting_symbol2, function(x) x[1])

ensemble_symbol_big <- cbind(splitting, symbol_names)

ensembl_symbol <- unique(ensemble_symbol_big)

colnames(ensembl_symbol) <- c("ENSEMBL", "Symbol")

write.table(ensembl_symbol, "ensembl_symbol.txt", sep = "\t", row.names = F)

• I am not sure what you mean by look up at mgi. I tried supplying mgi instead of mgi_symbol, and it did not work. Not sure whether it is an issue with biomart or not. How to do that with AWK? Can you give any links for doing that, tutorials? To learn whole new language just to do translation of ensembl ids to symbols seems like an overkill a bit, if it is not very easy. May 11, 2018 at 4:56
• What I mean with "look up at mgi", is look up the genes that are missed: e.g., cd45, and cd11b. You'll see that your names do not match the name given after Symbol, so how do you expect biomaRt to recognize them? I think AWK is a great tool for bioinformaticians, but if you don't want to make use of this tool, don't. I do not want to force you into something.
– benn
May 11, 2018 at 6:49