Last data update: 2014.03.03

R: Bimap objects and the Bimap interface
BimapR Documentation

Bimap objects and the Bimap interface

Description

What we usually call "annotation maps" are in fact Bimap objects. In the following sections we present the bimap concept and the Bimap interface as it is defined in AnnotationDbi.

Display methods

In the code snippets below, x is a Bimap object.

show(x): Display minimal information about Bimap object x.

summary(x): Display a little bit more information about Bimap object x.

The bimap concept

A bimap is made of:

  - 2 sets of objects: the left objects and the right objects.
    All the objects have a name and this name is unique in
    each set (i.e. in the left set and in the right set).
    The names of the left (resp. right) objects are called the
    left (resp. right) keys or the Lkeys (resp. the Rkeys).
  
   
  - Any number of links (edges) between the left and right
    objects. Note that the links can be tagged. In our model,
    for a given bimap, either none or all the links are tagged.
  

In other words, a bimap is a bipartite graph.

Here are some examples:

  1. bimap B1:

     4 left objects (Lkeys): "a", "b", "c", "d"
     3 objects on the right (Rkeys): "A", "B", "C"

     Links (edges):
      "a" <--> "A"
      "a" <--> "B"
      "b" <--> "A"
      "d" <--> "C"

     Note that:
       - There can be any number of links starting from or ending
         at a given object.
       - The links in this example are untagged.
  
  2. bimap B2:

     4 left objects (Lkeys): "a", "b", "c", "d"
     3 objects on the right (Rkeys): "A", "B", "C"

     Tagged links (edges):
       "a" <-"x"-> "A"
       "a" <-"y"-> "B"
       "b" <-"x"-> "A"
       "d" <-"x"-> "C"
       "d" <-"y"-> "C"

     Note that there are 2 links between objects "d" and "C":
     1 with tag "x" and 1 with tag "y".
  

Flat representation of a bimap

The flat representation of a bimap is a data frame. For example, for B1, it is:

    left  right
       a      A 
       a      B
       b      A
       d      C
  

If in addition the right objects have 1 multivalued attribute, for example, a numeric vector:

    A <-- c(1.2, 0.9)
    B <-- character(0)
    C <-- -1:1
  

then the flat representation of B1 becomes:

    left  right  Rattrib1
       a      A       1.2
       a      A       0.9
       a      B        NA
       b      A       1.2
       b      A       0.9
       d      C        -1
       d      C         0
       d      C         1
  

Note that now the number of rows is greater than the number of links!

AnnDbBimap and FlatBimap objects

An AnnDbBimap object is a bimap whose data are stored in a data base. A FlatBimap object is a bimap whose data (left keys, right keys and links) are stored in memory (in a data frame for the links). Conceptually, AnnDbBimap and FlatBimap objects are the same (only their internal representation differ) so it's natural to try to define a set of methods that make sense for both (so they can be manipulated in a similar way). This common interface is the Bimap interface.

Note that both AnnDbBimap and FlatBimap objects have a read-only semantic: the user can subset them but cannot change their data.

The "flatten" generic

    flatten(x) converts AnnDbBimap object x into FlatBimap
    object y with no loss of information
  

Note that a FlatBimap object can't be converted into an AnnDbBimap object (well, in theory maybe it could be, but for now the data bases we use to store the data of the AnnDbBimap objects are treated as read-only). This conversion from AnnDbBimap to FlatBimap is performed by the "flatten" generic function (with methods for AnnDbBimap objects only).

Property0

The "flatten" generic plays a very useful role when we need to understand or explain exactly what a given Bimap method f will do when applied to an AnnDbBimap object. It's generally easier to explain what it does on a FlatBimap object and then to just say "and it does the same thing on an AnnDbBimap object". This is exactly what Property0 says:

    for any AnnDbBimap object x, f(x) is expected to be
    indentical to f(flatten(x))
  

Of course, this implies that the f method for AnnDbBimap objects return the same type of object than the f method for FlatBimap objects. In this sense, the "revmap" and "subset" Bimap methods are particular because they are expected to return an object of the same class as their argument x, so f(x) can't be identical to f(flatten(x)). For these methods, Property0 says:

    for any AnnDbBimap object x, flatten(f(x)) is expected to
    be identical to f(flatten(x))
  

Note to the AnnotationDbi maintainers/developpers: the checkProperty0 function (AnnDbPkg-checker.R file) checks that Property0 is satisfied on all the AnnDbBimap objects defined in a given package (FIXME: checkProperty0 is currently broken).

The Bimap interface in AnnotationDbi

The full documentation for the methods of the Bimap interface is splitted into 4 man pages: Bimap-direction, Bimap-keys and Bimap-toTable.

See Also

Bimap-direction, Bimap-keys, Bimap-toTable, BimapFormatting, Bimap-envirAPI

Examples

  library(hgu95av2.db)
  ls(2)
  hgu95av2GO # calls the "show" method
  summary(hgu95av2GO)
  hgu95av2GO2PROBE # calls the "show" method
  summary(hgu95av2GO2PROBE)

Results


R version 3.3.1 (2016-06-21) -- "Bug in Your Hair"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> library(AnnotationDbi)
Loading required package: stats4
Loading required package: BiocGenerics
Loading required package: parallel

Attaching package: 'BiocGenerics'

The following objects are masked from 'package:parallel':

    clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
    clusterExport, clusterMap, parApply, parCapply, parLapply,
    parLapplyLB, parRapply, parSapply, parSapplyLB

The following objects are masked from 'package:stats':

    IQR, mad, xtabs

The following objects are masked from 'package:base':

    Filter, Find, Map, Position, Reduce, anyDuplicated, append,
    as.data.frame, cbind, colnames, do.call, duplicated, eval, evalq,
    get, grep, grepl, intersect, is.unsorted, lapply, lengths, mapply,
    match, mget, order, paste, pmax, pmax.int, pmin, pmin.int, rank,
    rbind, rownames, sapply, setdiff, sort, table, tapply, union,
    unique, unsplit

Loading required package: Biobase
Welcome to Bioconductor

    Vignettes contain introductory material; view with
    'browseVignettes()'. To cite Bioconductor, see
    'citation("Biobase")', and for packages 'citation("pkgname")'.

Loading required package: IRanges
Loading required package: S4Vectors

Attaching package: 'S4Vectors'

The following objects are masked from 'package:base':

    colMeans, colSums, expand.grid, rowMeans, rowSums

> png(filename="/home/ddbj/snapshot/RGM3/R_BC/result/AnnotationDbi/Bimap.Rd_%03d_medium.png", width=480, height=480)
> ### Name: Bimap
> ### Title: Bimap objects and the Bimap interface
> ### Aliases: Bimap Bimap class:Bimap Bimap-class AnnDbBimap
> ###   class:AnnDbBimap AnnDbBimap-class GoAnnDbBimap class:GoAnnDbBimap
> ###   GoAnnDbBimap-class Go3AnnDbBimap class:Go3AnnDbBimap
> ###   Go3AnnDbBimap-class GOTermsAnnDbBimap class:GOTermsAnnDbBimap
> ###   GOTermsAnnDbBimap-class AnnDbMap class:AnnDbMap AnnDbMap-class
> ###   IpiAnnDbMap class:IpiAnnDbMap IpiAnnDbMap-class AgiAnnDbMap
> ###   class:AgiAnnDbMap AgiAnnDbMap-class ProbeAnnDbBimap
> ###   class:ProbeAnnDbBimap ProbeAnnDbBimap-class ProbeGo3AnnDbBimap
> ###   class:ProbeGo3AnnDbBimap ProbeGo3AnnDbBimap-class ProbeAnnDbMap
> ###   class:ProbeAnnDbMap ProbeAnnDbMap-class ProbeIpiAnnDbMap
> ###   class:ProbeIpiAnnDbMap ProbeIpiAnnDbMap-class show,FlatBimap-method
> ###   show,AnnDbBimap-method summary,Bimap-method summary,AnnDbBimap-method
> ### Keywords: classes interface
> 
> ### ** Examples
> 
>   library(hgu95av2.db)
Loading required package: org.Hs.eg.db


>   ls(2)
 [1] "hgu95av2"              "hgu95av2.db"           "hgu95av2ACCNUM"       
 [4] "hgu95av2ALIAS2PROBE"   "hgu95av2CHR"           "hgu95av2CHRLENGTHS"   
 [7] "hgu95av2CHRLOC"        "hgu95av2CHRLOCEND"     "hgu95av2ENSEMBL"      
[10] "hgu95av2ENSEMBL2PROBE" "hgu95av2ENTREZID"      "hgu95av2ENZYME"       
[13] "hgu95av2ENZYME2PROBE"  "hgu95av2GENENAME"      "hgu95av2GO"           
[16] "hgu95av2GO2ALLPROBES"  "hgu95av2GO2PROBE"      "hgu95av2MAP"          
[19] "hgu95av2MAPCOUNTS"     "hgu95av2OMIM"          "hgu95av2ORGANISM"     
[22] "hgu95av2ORGPKG"        "hgu95av2PATH"          "hgu95av2PATH2PROBE"   
[25] "hgu95av2PFAM"          "hgu95av2PMID"          "hgu95av2PMID2PROBE"   
[28] "hgu95av2PROSITE"       "hgu95av2REFSEQ"        "hgu95av2SYMBOL"       
[31] "hgu95av2UNIGENE"       "hgu95av2UNIPROT"       "hgu95av2_dbInfo"      
[34] "hgu95av2_dbconn"       "hgu95av2_dbfile"       "hgu95av2_dbschema"    
>   hgu95av2GO # calls the "show" method
GO map for chip hgu95av2 (object of class "ProbeGo3AnnDbBimap")
>   summary(hgu95av2GO)
GO map for chip hgu95av2 (object of class "ProbeGo3AnnDbBimap")
|
| Lkeyname: probe_id (Ltablename: probes)
|    Lkeys: "1000_at", "1001_at", ... (total=12625/mapped=11242)
|
| Rkeyname: go_id (Rtablename: go_bpgo_ccgo_mf)
|    Rkeys: "GO:0000002", "GO:0000003", ... (total=16339/mapped=14375)
|
| tagname: Evidence
|
| direction: L --> R
>   hgu95av2GO2PROBE # calls the "show" method
GO2PROBE map for chip hgu95av2 (object of class "ProbeGo3AnnDbBimap")
>   summary(hgu95av2GO2PROBE)
GO2PROBE map for chip hgu95av2 (object of class "ProbeGo3AnnDbBimap")
|
| Lkeyname: probe_id (Ltablename: probes)
|    Lkeys: "1000_at", "1001_at", ... (total=12625/mapped=11242)
|
| Rkeyname: go_id (Rtablename: go_bpgo_ccgo_mf)
|    Rkeys: "GO:0000002", "GO:0000003", ... (total=16339/mapped=14375)
|
| tagname: Evidence
|
| direction: L <-- R
> 
> 
> 
> 
> 
> dev.off()
null device 
          1 
>