R与findOverlaps()重叠多个GRanges

use*_*480 4 intersection r range overlap

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

> 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢

Jer*_*myS 8

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

Sub1 <- subsetByOverlaps(gr,gr1)
Sub2 <- subsetByOverlaps(sub1,gr2)
Run Code Online (Sandbox Code Playgroud)

或直接

Reduce(subsetByOverlaps, list(gr, gr1, gr2))
Run Code Online (Sandbox Code Playgroud)

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

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