I am playing with biomart in order to get the list of genes associated to a specific gene ontology (GO) term.

So, if I use the webservice as in this query:

I get at least 50 genes. If I download the file I can gen an exact count of them:

$ cat mart_export.txt | wc -l

Now, I can do the same operation by using the R library biomaRt. Specifically:

> ensembl <- useEnsembl(biomart="ENSEMBL_MART_ENSEMBL", dataset='hsapiens_gene_ensembl')
> gene <- getBM(attributes = c('external_gene_name'), filters = 'go', values = 'GO:0030098', mart = ensembl)
> unique(gene)
1               SPI1
2              PRKDC
3                TOX
4               LY6D
5               CBFB
6              IKZF1
7               RELB
8             FLT3LG

By doing so, these are all the genes I retrieve. The two results are totally different and I don't know why it. All these eight genes are found in the biomart file (I grepped it, to be sure).

I believe this is not an issue related to databases versions since I checked:

               biomart               version
1 ENSEMBL_MART_ENSEMBL      Ensembl Genes 94
2   ENSEMBL_MART_MOUSE      Mouse strains 94
3     ENSEMBL_MART_SNP  Ensembl Variation 94
4 ENSEMBL_MART_FUNCGEN Ensembl Regulation 94


38 Human genes (GRCh38.p12)

Both are the same version used by biomart online.

What is going on? Is it possible that biomart online is considering GO relations that are not specified in the R version?

  • $\begingroup$ Funny: if I count the result of your query I get that there would be 361 genes. While we have 346 genes (you need to discount the header, and also as a tip wc -l mart_export.txt works as well). The difference between 361 and 346 might be duplicated gene, which suggests that they are considering GO child process. But I think that Emily might have a better answer for this. Have you searched online for similar questions? $\endgroup$
    – llrs
    Nov 9, 2018 at 8:43
  • $\begingroup$ yes, you're rigth about the header ;-) I forgot about it. also yes I looked for other similar questions and I found the one that suggested me to check the version used by R biomaRt. Another similar question biostars.org/p/14948 does not answer. How come that you get 361 lines? I'll try that again, sending another equal query. Lets see $\endgroup$
    – gabt
    Nov 9, 2018 at 8:49
  • $\begingroup$ Ok, I tried again and I still got 346 genes! This is weird! $\endgroup$
    – gabt
    Nov 9, 2018 at 8:52
  • $\begingroup$ The 361 is using the count feature of the query page. Instead of results I pressed count at the top left header. If you deselect the unique rows you'll get more genes $\endgroup$
    – llrs
    Nov 9, 2018 at 9:16
  • $\begingroup$ yes, I tried it but actually I don't know. Hopefully unique genes will be enough! $\endgroup$
    – gabt
    Nov 9, 2018 at 9:47

1 Answer 1


Sorry, this was my mistake in the last question. To search down the ontology, rather than just for the specific association with a term, biomaRt needs a different filter: 'go_parent_term'.


gene <- getBM(attributes = c('external_gene_name'), filters = 'go_parent_term', values = 'GO:0030098', mart = ensembl)
  • 1
    $\begingroup$ ooook, that works perfectly! A small point, though. Is this using only "is_a" relations or is it using any kind of GO relations? $\endgroup$
    – gabt
    Nov 9, 2018 at 9:27
  • $\begingroup$ These are the mapping we use between parent and child: biological_process = is_a,part_of,regulates,positively_regulates,negatively_regulates; cellular_component = is_a,part_of; molecular_function = is_a,part_of $\endgroup$ Nov 9, 2018 at 14:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.