4

我环顾四周,似乎之前没有发布任何关于此的问题。我有两个带有一些坐标的 GRanges 对象,我想从另一个中减去一个的间隔。这与使用 findOverlaps() 或使用 intersect() 查找重叠不同。

例如:

granges.in 

seqnames ranges$start ranges$end

chr01 1100 2000

chr01 2100 3000

chr02 1000 4000

chr03 1500 3500

granges.out

seqnames ranges$start ranges$end

chr01 1000 1200

chr02 2500 3000

chr03 1500 2000

chr03 3000 3500

而且我要:

granges.ref

seqnames ranges$start ranges$end

chr01 1200 2000

chr01 2100 3000

chr02 1000 2500

chr02 3000 4000

chr03 2000 3000

以下工作,但它非常笨拙,我必须逐个染色体地做它,因为每个染色体的间隔数在两个对象之间不匹配。

setdiff(ranges(genome.ref[seqnames(granges.in) == "chr01"]), ranges(interval[seqnames(granges.out)== "chr01"]))

有没有一种更快、更有效的方法来整体使用这两个 GRange 对象?谢谢!

4

1 回答 1

1
setdiff(x, y, ignore.strand=TRUE) 

能行得通。同样, plyranges库也很容易使用 Granges。

于 2021-09-01T15:53:09.110 回答