Hello
I have a Granges object (gr) and a GRangesList (grlist) of the same length. I want to intersect them element-wise, that is, I want to know if any element in grlist[[i]] is (fully) contained in gr[i].
I can of course do something of the loop variant:
intersect<-lapply(seq(length(gr)), function(i) overlapsAny(gr[i],grlist[[i]]).
Is there a better way to do this that I'm missing? mapply would have been useful
here but as far as I know it doesn't accept GRanges.
If it's of any relevance, the members of grlist are exons of genes. I know (from a previous step in my pipeline) that gr[i] partially overlaps the gene whose exons are represented by grlist[[i]], and I ant to know if there is at least one exon contained in it.
Example:
gr<-GRanges(seqnames=c('chr1','chr2'), ranges=IRanges(start=c(10,20),end=(50,100))
gr1<-GRanges(seqnames=c('chr1','chr2'), ranges=IRanges(start=c(10,20),end=(500,1000))
gr2<-GRanges(seqnames='chr1','chr4' ranges=IRanges(start=c(10,1000),end=c(10000,4000))
grlist<-GRangesList(gr1,gr2)
Now, gr1[1] is within gr[1], hence there is a range in grlist[[1]] that is within gr[1] so I want the function to return TRUE for gr[1].
However, none of the ranges in gr2 (and hence grlist[[2]]) are within gr[2], thus I want the function to return FALSE for gr[2].
Thanks in advacne
Dolev Rahat
Thanks! I did not know that mapply() works on GRangesList. Good to know.
FWIW
mapply()
works on anything that supports[[
(double-bracket subsetting). Right now[[
doesn't work on a GRanges but coercing the GRanges to GRangesList is a workaround to make[[
work on it:H.