2

我发现了其他关于在 R iRanges 中通常找到重叠范围的帖子,但是你能帮我解决这个额外的小转折吗:我有两个相关的范围(一个可能的基因组重排,一个起始范围和一个结束范围),我想过滤掉母基因组中的相同范围

我发现停止和开始的范围如下(字符编号、间隔开始、间隔结束),其中左侧的 3 列显示重新排列的开始,右侧的 3 列显示重新排列的结束(它们是称为 SVDetect 的程序的输出,它使用 NGS 数据来查找与参考基因组有异常对齐的配偶对)。我有两个基因组,母亲克隆和女儿,并且想找到女儿独有的重排=我想过滤掉两个范围与另一个范围的相同行重叠的行。范围可能有点不同,但如果两个范围重叠,则强烈表明重排已经存在于母亲体内。

女儿:

1  1384138 1384862 - 1  516731  516918
2  3758860 3759278 - 2  879828  879966 # (filter away this line as overlap with below)
2  3940051 3940470 - 2  3940856 3941250

母亲:

2  3758858 3759282 - 2  879828  879966 # (overlap with this range)
1  1384138 1384862 - 3  116231  516918
2  3940051 3940470 - 3  1540856 3941250
4

1 回答 1

0

诀窍是使用两组GRanges,一组用于重排开始,一组用于重排结束,然后将结果组合如下:

### Create GRanges for daughter - copied from example
daughterStart <- GRanges(c(1,2,2), IRanges(c(1384138,3758860,3940051), c(1384862,3759278,3940470)))
daughterEnd <- GRanges(c(1,2,2), IRanges(c(516731,879828,3940856), c(516918,879966,3941250)))

### Create GRanges for mother - copied from example
motherStart <- GRanges(c(2,1,2), IRanges(c(3758858,1384138,3940051), c(3759282,1384862,3940470)))
motherEnd <- GRanges(c(2,3,3), IRanges(c(879828,116231,1540856), c(879966,516918,3941250)))

然后我们使用 findOverlaps() 函数使用女儿作为查询来识别是否有任何重叠,因为我们在询问女儿重排是否与母亲重排重叠(由于 Granges 具有不同的 seqlevel(染色体),因此使用了 suppressWarnings(),从而给出了一个警告) :

starOverlap <- suppressWarnings( findOverlaps(query = daughterStart, subject = motherStart) ) # suppressWarnings to ignore wanings about different chromosomes
endOverlap  <- suppressWarnings( findOverlaps(query = daughterEnd,   subject = motherEnd  ) )

最后我们确定重排开始和重排结束重叠中是否有任何相同的重叠:

> starOverlap %in% endOverlap
[1] FALSE  TRUE FALSE

可用于获取不重叠的女儿对的索引,只需添加一个!

> starOverlap@queryHits[ ! (starOverlap %in% endOverlap) ]
[1] 1 3

而且由于这种方法依赖于 findOverlaps 并且是矢量化的,因此它可以快速进行数百万次重排

于 2014-12-19T14:48:26.890 回答