Get RefSeq accession numbers with versions Google searching for NM_002084 gives the following result:

NM_002084.4

This, I assume, is the latest version v4, hence the .4 suffix.

Searching for previous versions I get the following results, along with notes saying it was updated or removed.

NM_002084.3


  This sequence has been updated. See current version.


NM_002084.2

NM_002084.1


  Record removed. This record was replaced or removed.


Using biomaRt I can get the latest(?) version as follows:

library("biomaRt")

# define db
ensembl &lt;- useMart("ensembl", dataset = "hsapiens_gene_ensembl")

# get refseqs
getBM(attributes = c('refseq_mrna',
                     'chromosome_name',
                     'transcript_start',
                     'transcript_end',
                     'strand'),
      filters = c('refseq_mrna'),
      values = list(refseq_mrna = "NM_002084"),
      mart = ensembl)
#  refseq_mrna chromosome_name transcript_start transcript_end strand
#1   NM_002084               5        151020438      151028992      1


But querying for specific versions gives nothing:

getBM(attributes = c('refseq_mrna',
                     'chromosome_name',
                     'transcript_start',
                     'transcript_end',
                     'strand'),
      filters = c('refseq_mrna'),
      values = list(refseq_mrna = c("NM_002084.1", "NM_002084.2", "NM_002084.3", "NM_002084.4")),
      mart = ensembl)
# [1] refseq_mrna      chromosome_name  transcript_start transcript_end   strand          
# &lt;0 rows&gt; (or 0-length row.names)


Question: How can I get all versions (preferably using R)?
I don't believe this is possible using biomaRt, nor using AnnotationHub.

I have two suggestions, neither of them very satisfactory. First, you can specify an Ensembl archive for biomaRt, for example:

mart72.hs &lt;- useMart("ENSEMBL_MART_ENSEMBL", "hsapiens_gene_ensembl", 
                      host = "jun2013.archive.ensembl.org")


Of course, that requires that you have some idea of the date for each accession version and that the archives span that date - so not especially useful.

The other option is to access EUtils using e.g. rentrez, which does allow search by version number:

library(rentrez)
es &lt;- entrez_search("nuccore", "NM_002084.1 NM_002084.2")
es$ids

[1] "4504104" "6006000"


So knowing the accession, you could simply append 1, 2, 3... to it, run the search and see if UIDs come back, then get them using entrez_fetch.

EDIT: here's a quick and dirty function which takes an accession as query, appends version = 1, fetches the ID, then increments the version and repeats until no more results are returned. It is not well-tested!

getVersions &lt;- function(accession) {
  require(rentrez)
  ids &lt;- character()
  version &lt;- 1
  repeat({
    es &lt;- entrez_search("nuccore", paste0(accession, ".", version))
    if(length(es$ids) == 0) {
      break
    }
    ids[version] &lt;- es$ids
    version &lt;- version + 1
  })
  ids
}


Example:

getVersions("NM_002084")
[1] "4504104"    "6006000"    "89903006"   "1048339180"