我有三张不同基因组间隔的表。这是一个例子:
> 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吗?
任何帮助将不胜感激。如果在别处问过这个问题,我会事先道歉。
由于
答案 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)重叠的坐标。因此,为了找到公共区间(交叉区域),相交是一个合适的函数。