Hi,
I have a GRanges object und would like to retrieve sets of reciprocal overlaps:
library(GenomicRanges)
gr = GRanges(seqnames = rep("chr1",4),
ranges = IRanges(start = c(1,2,3,8),
end = c(12,6,6,10)),
strand = rep("+", 4))
> gr
GRanges object with 4 ranges and 0 metadata columns:
seqnames ranges strand
<Rle> <IRanges> <Rle>
[1] chr1 [1, 12] +
[2] chr1 [2, 6] +
[3] chr1 [3, 6] +
[4] chr1 [8, 10] +
-------
Range #1 overlaps with all other ranges, however I would like to get only those overlaps which hold in a transitive manner. such as: Range #1 overlaps with #2, #2 with #3 and #3 with #1.
At the moment I am filtering the output of findOverlaps (unsatisfactorily with the help of a loop..). Is there a more direct way to do this?
Many thanks for any comments,
Stefanie

I'll note that RBGL package has a transitive.closure function that operates on various types
of graph defined in the graph package. Transforming the range data into a graph for this purpose
doesn't seem particularly hard, but in a naive approach there would be pairwise testing.
Thanks for pointing out the graph perspective. I will consider to reformulate the problem in this context!
What a neat, elegant way :) thanks a lot!
I wish all my posts were associated with "neat" and "elegant"--thanks!