R与findOverlaps()重叠多个GRanges

时间:2014-04-28 02:12:25

标签: r intersection overlap range

我有三张不同基因组间隔的表。这是一个例子:

> a
   chr interval.start interval.end names
1 chr1              5           10     a
2 chr1              6           10     b
3 chr2              7           10     c
4 chr3              8           10     d

> b
   chr interval.start interval.end names
1 chr1              6           15     e
2 chr1              7           15     f
3 chr1              8           15     g

> c
   chr interval.start interval.end names
1 chr1              7           12     h
2 chr1              8           12     i
3 chr5              9           12     j
4 chr10             10          12     k
5 chr20             11          12     l

我试图在将信息转换为GRanges后找到所有表之间的公共间隔。基本上我想做像交叉(c,intersect(a,b))之类的东西。但是,因为我使用的是基因组坐标,所以我必须使用GRanges和GenomicRanges包,我不熟悉。

我可以做findOverlaps(gr,gr1)或findOverlaps(gr1,gr2),但有一种简单的方法可以像findOverlaps(gr,gr1,gr2)一样重叠多个GRanges吗?

任何帮助将不胜感激。如果在别处问过这个问题,我会事先道歉。

由于

2 个答案:

答案 0 :(得分:7)

您可以使用subsetByOverlaps一对比较结果对其中一个进行子集,然后使用该子集与第三组进行比较。

Sub1 <- subsetByOverlaps(gr,gr1)
Sub2 <- subsetByOverlaps(sub1,gr2)

或直接

Reduce(subsetByOverlaps, list(gr, gr1, gr2))

导致GRanges对象的子集在所有3个GRanges对象中重叠

根据您想要的重叠类型以及具有最大范围的重叠类型,您应该考虑将哪个用作查询以及哪个主题。

答案 1 :(得分:0)

以下工作用于获取所有范围之间的精确相交。

Reduce(intersect, list(gr, gr1, gr2))

在:

Reduce(subsetByOverlaps, list(gr, gr1, gr2))

subsetByOverlaps将第一个granges对象作为查询(括号中的第一个对象,此处为gr),并返回查询(gr)中与主题中至少一个元素(gr1,gr2)重叠的坐标。因此,为了找到公共区间(交叉区域),相交是一个合适的函数。