# Off-by-one error when mapping Ensembl IDs to gene symbols

I have a matrix with ensemblIds which I am trying to convert to gene symbols using BioMart. Some of the ensemblIds will not be mapped, so I need to subset the rows of the matrix. It seems like BioMart adds one ensemblId or at least I see one more result ultimately than should be. Here is what I am trying to do:

library(dplyr)
library(tibble)
ids <- rownames(mtx_combined)
mart <- useDataset("mmusculus_gene_ensembl", useMart("ensembl"))
list <- getBM(filters= "ensembl_gene_id", attributes= c("ensembl_gene_id",
"mgi_symbol","description"),values=ids,mart= mart)
mtx_mapped <- as.matrix(as.data.frame(mtx_combined) %>%
rownames_to_column("gene") %>%
filter(rownames(mtx_combined) %in% list$ensembl_gene_id) %>% column_to_rownames("gene")) rownames(mtx_mapped) <- list$mgi_symbol   //Fails


Length of the returned list is 18337, number of rows in the initial matrix is 18376. After subsetting I expect to get 18337 rows, but getting one less - 18336. What am I doing wrong here?

• What is the extra line? Just print them out and see. Could it be adding a header, for example? May 2 '18 at 8:58