Hello, I have a GRanges (gr) object and a GRangesList (grlist).
I want to find elements in grlist that fully overlap elements of gr.
That is, I want to know, for a given i and j if there is k such that
grlist[j][[k]] is fully contained within gr[i]. It is important
that the values of both i and j can be extracted from the function (k is not important for me).
For example, if I have
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)
gr[1][1] is within gr[1]. However no element of gr2 is fully contained in gr[1].
Further, no element of either gr1 or gr2 is fully contained in gr[2].
So I would the function call f(gr,grlist) to return (TRUE,FALSE,FALSE,FALSE)
I tried using:
flat<-unlist(grlist,use.names=FALSE)
g<-relist(flat%within%gr, grlist)
But this only tells me for an element of grlist if it is contained in any element of gr.
Is there any way to extract which which element of gr contains it?
Note: I did ask a similar question (https://support.bioconductor.org/p/71619), but on an afterthought decided that mapply() style comparison does not suit my needs (I need to compare every i to every j, not just j=i). Sorry for the confusion.
Thanks in advance
Dolev Rahat
@Valerie Obenchain. Thanks for your reply. The output in your example seems what I want. However, In your call to lapply(), you iterate on an object called lst? Can you please tell me what it this object. I did not see it defined in your reply. Thanks again.
Oh my, I completely missed that line when I pasted. Sorry about that. The missing 'lst' is a split of the subject hits (ranges in 'flat') by the query hits (ranges in 'gr').
> lst <- split(subjectHits(fo), queryHits(fo)) > lst $`1` [1] 1 3 $`2` [1] 2
Valerie
Thanks! just what I needed.