text: user2005: 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?
  
  user29: There’s no 1:1 mapping between the IDs of different database schemas. As a consequence, some Ensembl gene IDs map to multiple MGI symbols, or to none (and vice versa).
  Therefore, you can’t assume that the number of result rows will be equal to the number of query IDs.
  
original_text: 2005: <p>I have a matrix with <code>ensemblIds</code> which I am trying to convert to gene symbols using <code>BioMart</code>. Some of the <code>ensemblIds</code> will not be mapped, so I need to subset the rows of the matrix. It seems like <code>BioMart</code> adds one <code>ensemblId</code> or at least I see one more result ultimately than should be. Here is what I am trying to do:</p>
  
  <pre><code>library(dplyr)
  library(tibble)
  ids &lt;- rownames(mtx_combined)
  mart &lt;- useDataset("mmusculus_gene_ensembl", useMart("ensembl"))
  list &lt;- getBM(filters= "ensembl_gene_id", attributes= c("ensembl_gene_id",
                             "mgi_symbol","description"),values=ids,mart= mart)
  mtx_mapped &lt;- as.matrix(as.data.frame(mtx_combined) %&gt;% 
  rownames_to_column("gene") %&gt;%
  filter(rownames(mtx_combined) %in% list$ensembl_gene_id) %&gt;%
  column_to_rownames("gene"))
  
  rownames(mtx_mapped) &lt;- list$mgi_symbol   //Fails 
  </code></pre>
  
  <p>Length of the returned <code>list</code> is <code>18337</code>, number of rows in the initial matrix is <code>18376</code>. After subsetting I expect to get <code>18337</code> rows, but getting one less - <code>18336</code>. What am I doing wrong here?</p>
   29: <p>There’s no 1:1 mapping between the IDs of different database schemas. As a consequence, some Ensembl gene IDs map to multiple MGI symbols, or to none (and vice versa).</p>
  
  <p>Therefore, you can’t assume that the number of result rows will be equal to the number of query IDs.</p>
  