Bimap对象概览
我们平常所见的“注释映射”(annotation maps)就是Bimap对象。例如,x是一个Bimap对象,使用show(x)
或summary(x)
,就可以显示一些有关这个对象的信息,两者的区别在于,后者显示的信息更多,如下所示:
|
|
Bimap对象的构成
一个bimap由2部分构成。第一部分是2个对象集,就像上面所说的,左侧的对象集与右侧的对象集,这两个对象集中的每一个成员都有自己的名称,并且这个名称在各自的对象集中是唯一的。左侧对象集的名称称为left keys,或者是Lkeys,相应的右侧就是Rkeys。第二部分就是左侧与右侧的映射数目,并且链接是可以被标记的(tagged),关于这个“标记”是什么意思,下文会提到。总之,一个bimap对象其实就是一个二分图(bipartite grpha)。
什么是二分图呢,看下面的案例。
案例1:B1
是某个bimap对象,它有4个Lkeys,即abcd,它有3个Rkeys,分别为ABC,它的链接(原文是Links,或edges)链接关系如下所示:
|
|
这里我们需要注意的是,第一,在一个确定的对象中,从左侧到右侧的链接数目可以是任意值。第二,在这个案例中,链接数目并没有标记(tagged)。
再看一个叫B2
的bimap文件,它有4个Lkeys,分别为abcd,有3个Rkeys,分别为ABC,这个bimap文件中的链接进行了标记,如下所示:
|
|
从上面的数据可以看出来,d与C存在两个链接(links),其中一个标记(tag)为x,另外一个标记为y。
bimap除了用箭头表示映射关系外,还可以采用数据框的形式,下面就是B1
文件的映射关系,如下所示:
|
|
如果右侧的对象有一个多值属性,就像下面的这个样子:
|
|
那么B1的平面表示法(英文是Flat representation),就是下面的这个样子:
|
|
从上面的这个案例我们就知道,行数(这里是8)大于链接数(这里是4)。
AnnDbBimap与FlatBimap对象
AnnDbBimap对象是bimap对象的一种,它储存于数据库中。一个FLastBimap的数据(Lkeys,Rkeys和Links)储存在内存(用数据框的形式储存Links)。从概念上讲,AnnDbBimap和FlatBimap对象是一样的(只是它们的内部表示不一样),因此我们可以使用一组方法来对它们进行操作,最常见的接口(common interface)就是Bimap interface。这里需要注意的是,AnnDbBimap和FlastBimap对象都是只读对象,无法更改它们,只能读取。
使用flatten()
函数可以将AnnDbBimap对象转换为一个FlatBimap对象。但是,一个FlatBimap对象不能转换为AnnDbBimap对象,flatten()这个泛型函数在理解一个特定的Bimap的方法,即f
方面很有用。对于任何的AnnDbBimap对象x来说,f(x)
与f(flatten(x))
是一样的。这就说明,f
方法作用于AnnDbBimap对象时,它返回的类型与f
方法作用于FlatBimap对象是一样。
处理Bimap对象的函数
处于Bimap对象的函数有以下这些。
key()
,它返回一个Bimap对象的所有keys,例如keys(hgu95av2GO)
。length()
,它等于同length(keys(x))
。isNA()
,返回一个逻辑向量,长度与参数一样,如果是TRUE,则表示keys没有映射。mappedkeys()
,返回keys(x)
的子集,也就是只产生了映射的子集,这是一个处理Bimap对象的接口。count.mappedkyes()
,相当于length(mappedkeys(x))
。
现在我们来看一个Bimap对象hgu95av2GO
,如下所示:
|
|
从上面的信息我们可以知道,hgu95av2GO
是一个用于hgu95av2芯片的GO map文件,使用summary(hgu95av2GO)
文件我们可以了解到更加全面的信息,如上所述。
现在对hgu95av2GO
这个对象进行几个操作,如下所示:
direction()
|
|
从上面的结果可以看出来,direction(x)
这个函数的作用是改变映射方向,当是1的时候,是从左向右映射,当是-1的时候,是从右向左映射,summary(x)
结果的最后一行可以看出来。
direction()这个函数与revmap()函数的功能是一样,如下所示。
revmap()
这个函数是调换Bimap的左右两侧的映射关系,如下所示:
|
|
Lkeys()与Rkeys()
Lkeys()这个函数可以提取出Bimap左侧的成员,Rkeys()则是提取右侧成员,如下所示:
|
|
Llength()和Rlength()
这两个函数分别是列出左侧与右侧的成员数目,如下所示:
|
|
mappedLkeys()与mappedRkeys()
查看是匹配的keys,如下所示:
|
|
as.list()
使用as.list()
可以将Bimap文件转换为列表,如下所示:
|
|
as.character()
使用as.character()
可以将Bimap文件转换为字符串,如下所示:
|
|
Bimap-envirAPI
Bimap-envirAPI的这些操作可以像在R中操作环境一样操作Bimap对象,看下面的案例:
ls()
显示某个Bimap对象的成员,用法如下所示:
|
|
name是Bimap对象的名称,其它的参数不用管,用法如下所示:
|
|
显示前3个成员
exist()
判断某个成员是否存在于Bimap对象中,用法如下所示:
|
|
看一个案例:
|
|
get()
获得左侧某个成员在右侧的映射对象,用法如下所示:
|
|
使用如下:
|
|
mget()
获取多个成员,如下所示:
|
|
sample(x,n)
表示随机从x中取出3对映射关系,如下所示:
|
|
toTable与links
将Bimap对象转换为数据框,如下所示:
|
|
links()与toTable的功能一样,如下所示:
|
|
nhit()
此函数返回一个名义整数向量,值为一系列的0或1,1表示有映射关系,0表示没有,这与isNA()
类似,如下所示:
|
|
从上面的str(x_names)
结果我们可以看到第8个是0,它表示不存在左侧的成员与右侧的成员的映射关系,如下所示:
|
|
从上面我们可以知道,1007_s_at
这个探针并没有映射到相应的基因上。hgu95av2SYMBOL一共有1154个探针没有相应的映射。
提取没有映射关系的探针
前面知道,有1154个探针没有映射到相应的基因上,现在我们把那些映射到相应基因上的探针提取出来,如下所示:
|
|