Skip to content

[Bioc-devel] GenomicRanges List subclass and apply

6 messages · Jack Fu, Michael Lawrence, Hervé Pagès

#
Hey all,

I think some of the recent changes to GRanges has affected using the 
apply class functions with GRanges objects:

  o GenomicRanges now is a List subclass. This means that GRanges objects
       and their derivatives are now considered list-like objects (even though
       [[ don't work on them yet, this will be implemented in Bioconductor 3.8).


The following code will throw:
gr <- GRanges(1, IRanges(1:2, 3:4))
sapply(gr, print)

Error in (function (classes, fdef, mtable)  :
   unable to find an inherited method for function 'getListElement' for 
signature '"GRanges"'

Access using gr[1], gr[1:2] still works normally.
Are there any recommendations on a workaround for this issue without 
resorting back to for loops?

Thanks all,
Jack
#
Just out of curiosity, why are you looping over a GRanges in the first place?
On Mon, May 14, 2018 at 7:28 AM, Jack Fu <jfu14 at jhu.edu> wrote:
#
Hi Michael,

Mostly for sending each element of the GRanges object to a custom 
function that runs an identical analysis on each element.
I have some functions that take as input a single range -> calculate 
number of reads that overlap the range -> subset the range into K number 
of segments based on coverage patterns across the range.

Thanks!
Jack
Michael Lawrence wrote:

  
  
#
It's possible that you could vectorize this code. Maybe open an issue
on the support site.
On Mon, May 14, 2018 at 7:56 AM, Jack Fu <jfu14 at jhu.edu> wrote:
#
Hi Jack,

You can use

   sapply(seq_along(gr), function(i) print(gr[i]))

instead of

   sapply(gr, print)

But yes, as Michael noted, looping on a GRanges or IRanges object
is generally not efficient and should be avoided. There is almost
always a "vectorized" solution and it's generally much faster.
However, depending on what you are trying to do exactly, coming up
with a "vectorized" solution can be tricky.

Cheers,
H.
On 05/14/2018 07:28 AM, Jack Fu wrote:

  
    
#
Thanks all -> I definitely see the appeal of vectorization.
I'm going to take a few pokes to do just that.

Best,
Jack
Herv? Pag?s wrote: