[BioC] IRanges : Strange behavior subsetting an IntervalTree with an indexing variable from within a function

Steve Lianoglou lianos at cbio.mskcc.org
Wed Sep 9 19:59:10 CEST 2009


Argh!

Wrapping into the for loop actually didn't fix anything -- the  
symptoms of the problem have matured in a way that make even less  
sense to me now.

It just seems as if the value of my indexing variable (``hits``) is  
stuck on the value that was first used when trying to index into my  
IntervalTree -- every time I use ``hits`` it always returns the same  
bunch of Intervals that were returned the first time my interval tree  
was indexed, even though its (hits) current value is different.

For instance, in the 6th iteration of the loop:

Browse[1]> hits
  [1] 3025 3026 3027 3028 3094 3095 3096 3097 3098 3099 3100 3101 3102  
3103

Browse[1]> ir[hits]
IntervalTree instance:
     start   end width
[1] 34576 34581     6
[2] 34608 34613     6
[3] 34635 34640     6
[4] 34888 34893     6

Clearly that's wrong there should be 13 intervals returned.

Those values being returned are from the "hits" vector that was  
calculated on the first pass of the loop, which was 158:161. This was  
calc'd 5 iterations ago, though, and should be long since gone!.

Browse[1]> ir[158:161]
IntervalTree instance:
     start   end width
[1] 34576 34581     6
[2] 34608 34613     6
[3] 34635 34640     6
[4] 34888 34893     6

Let's make ``hits`` something completely inane:

Browse[1]> hits <- 0
Browse[1]> ir[hits]
IntervalTree instance:
     start   end width
[1] 34576 34581     6
[2] 34608 34613     6
[3] 34635 34640     6
[4] 34888 34893     6

Meh ... this is only happening when indexing my IntervalTree, though:

Browse[1]> m <- matrix(1:100, 10,10)
Browse[1]> m[hits]
integer(0)


Still -- indexing with a NEW var, one that was never defined before,  
fails again on the IntervalTree:

Browse[1]> yy <- 1:10
Browse[1]> ir[yy]
Error in eval(expr, envir, enclos) : object 'yy' not found

Browse[1]> m[yy]
[1]  1  2  3  4  5  6  7  8  9 10

I'm stuck in bizarro land, and don't know how to get out ... anybody  
have a map?

-steve

On Sep 9, 2009, at 1:03 PM, Steve Lianoglou wrote:

> Hmm ... continuing from the previous email, switching the code out  
> of lapply and into a for loop seems to fix.
>
> So, instead of:
>
> dist <- lapply(range.list, function(rl) {
> hits <- subjectHits(overlap(ir, rl))
> browser() # The debug calls below start from here
> if (length(hits) > 1) {
>   diff(start(ir[hits]))
> } else {
>   NA
> }
> })
>
> do this:
>
> dist <- list()
> for (idx in seq(range.list)) {
>  hits <- subjectHits(overlap(ir, range.list[[idx]]))
>  dist[[idx]] <- if (length(hits) > 1) {
>    diff(start(ir[hits]))
>  } else {
>    NA
>  }
> }
>
> That works. Weird, no?
>
> Of course, I forgot to mention sessionInfo() -- sorry.
>
> R> > sessionInfo()
> R version 2.10.0 Under development (unstable) (2009-09-07 r49613)
> x86_64-apple-darwin9.8.0
>
> locale:
> [1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
>
> other attached packages:
> [1] RSQLite_0.7-2      DBI_0.2-4          ShortRead_1.3.33    
> lattice_0.17-25    BSgenome_1.13.11   doMC_1.1.1          
> multicore_0.1-3
> [8] foreach_1.2.1      codetools_0.2-2    iterators_1.0.2     
> Biostrings_2.13.36 IRanges_1.3.69     ARE.utils_0.1.0
>
> loaded via a namespace (and not attached):
> [1] Biobase_2.5.5 grid_2.10.0   hwriter_1.1   tools_2.10.0
>
> -steve
>
> --
> Steve Lianoglou
> Graduate Student: Computational Systems Biology
>  |  Memorial Sloan-Kettering Cancer Center
>  |  Weill Medical College of Cornell University
> Contact Info: http://cbio.mskcc.org/~lianos/contact
>



More information about the Bioconductor mailing list