how to transform a list of IRanges into a RangesList instance
1
0
Entering edit mode
@tobiaskockmann-11966
Last seen 7.6 years ago

Dear bioC support,

I have constructed a list of IRanges named rl:

> class(rl)
[1] "list"
> class(rl[[1]])
[1] "IRanges"
attr(,"package")
[1] "IRanges"

Now I realized that there is already a RangesList class in the IRanges package that I could use instead of the "primitive" list. Problem: I used dlply() from the plyr package to construct the list and I do not see how I could use the RangesList constructor function in the split+apply+combine context. But one can coerce a RangedList to a list by as. list(), Now I was wondering, is there a function that does the opposite?

Greetings,

Tobi

> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: macOS Sierra 10.12.3

locale:
[1] C

attached base packages:
[1] parallel  stats4    stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] lattice_0.20-34     plyr_1.8.4          Biostrings_2.42.1   XVector_0.14.0     
[5] IRanges_2.8.1       S4Vectors_0.12.1    BiocGenerics_0.20.0

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.9           nloptr_1.0.4          MSstats_3.7.3         bitops_1.0-6         
 [5] tools_3.3.2           zlibbioc_1.20.0       lme4_1.1-12           preprocessCore_1.36.0
 [9] tibble_1.2            nlme_3.1-130          gtable_0.2.0          Matrix_1.2-8         
[13] ggrepel_0.6.5         stringr_1.1.0         gtools_3.5.0          caTools_1.17.1       
[17] grid_3.3.2            marray_1.52.0         survival_2.40-1       minpack.lm_1.2-1     
[21] gdata_2.17.0          limma_3.30.9          minqa_1.2.4           ggplot2_2.2.1        
[25] reshape2_1.4.2        magrittr_1.5          scales_0.4.1          gplots_3.0.1         
[29] MASS_7.3-45           splines_3.3.2         assertthat_0.1        colorspace_1.3-2     
[33] KernSmooth_2.23-15    stringi_1.1.2         lazyeval_0.2.0        munsell_0.4.3        
>
RangesList-class {IRanges} • 2.0k views
ADD COMMENT
3
Entering edit mode
@james-w-macdonald-5106
Last seen 3 days ago
United States

It's just as one might imagine:

> lst <- list(IRanges(3,5), IRanges(4,5), IRanges(3,6))
> lst
[[1]]
IRanges object with 1 range and 0 metadata columns:
          start       end     width
      <integer> <integer> <integer>
  [1]         3         5         3

[[2]]
IRanges object with 1 range and 0 metadata columns:
          start       end     width
      <integer> <integer> <integer>
  [1]         4         5         2

[[3]]
IRanges object with 1 range and 0 metadata columns:
          start       end     width
      <integer> <integer> <integer>
  [1]         3         6         4

> as(lst, "RangesList")
RangesList of length 3
[[1]]
IRanges object with 1 range and 0 metadata columns:
          start       end     width
      <integer> <integer> <integer>
  [1]         3         5         3

[[2]]
IRanges object with 1 range and 0 metadata columns:
          start       end     width
      <integer> <integer> <integer>
  [1]         4         5         2

[[3]]
IRanges object with 1 range and 0 metadata columns:
          start       end     width
      <integer> <integer> <integer>
  [1]         3         6         4
ADD COMMENT
0
Entering edit mode

THX!

> real.rl <- as(rl, "RangesList")
> class(real.rl)
[1] "SimpleRangesList"
attr(,"package")
[1] "IRanges"

Where is that function documented?

ADD REPLY
0
Entering edit mode

The as function is documented as part of the methods package. I think under the hood it ends up calling RangesList though, which is documented in ?RangesList. Either way works:
 

> class(as(rlst, "RangesList"))
[1] "SimpleRangesList"
attr(,"package")
[1] "IRanges"
> class(RangesList(rlst))
[1] "SimpleRangesList"
attr(,"package")
[1] "IRanges"

 

ADD REPLY
0
Entering edit mode

The as() function call looks for coerce() methods, so ?"coerce,list,RangesList". Many things in that last sentence are not obvious.

ADD REPLY
0
Entering edit mode

THX Martin! A general question: I am starting to develop a package for dealing with peptide mapping data (data coming from a bottom-up proteomics experiment) and I think the Biostrings and IRanges package could be the basis for this, but I am having trouble to get an overview what functionality is already available. Where can I find such information apart from the package vignettes?
 

ADD REPLY
0
Entering edit mode

The  GenomicRanges vignettes are also relevant to IRanges. One might also look at conference presentations, especially last year and other course material.

ADD REPLY
0
Entering edit mode

Hi Martin,

I am having a bit of a problem using as(..., "RangesList") in the context of my package. I always get the error that the appropriate method is not found in the context of testthat(...). How would you handle this? Calling the RangesList() constructor directly instead of as() -> coerce() -> ...

?

ADD REPLY
0
Entering edit mode

Better to ask questions about package development on the Bioconductor devel mailing list. For packages you need to import the appropriate method, importMethodsFrom(IRanges, coerce). if your unit test uses the public interface to your package, then problems likely indicate inappropriate NAMESPACE, but a more accurate diagnosis would benefit from actually looking at  the package code, e.g., including  a github reference.

ADD REPLY
0
Entering edit mode

Note that there is also an IRangesList() constructor function that is very similar to RangesList() except that it produces an IRangesList object which is more specific than a RangesList (i.e. the former is a subclass of the latter):

IRangesList(lst)
# IRangesList of length 3
# [[1]]
# IRanges object with 1 range and 0 metadata columns:
#           start       end     width
#       <integer> <integer> <integer>
#   [1]         3         5         3
#
# [[2]]
# IRanges object with 1 range and 0 metadata columns:
#           start       end     width
#       <integer> <integer> <integer>
#   [1]         4         5         2
#
# [[3]]
# IRanges object with 1 range and 0 metadata columns:
#           start       end     width
#       <integer> <integer> <integer>
#   [1]         3         6         4

Also, IRangesList() has a compress argument to let you choose between 2 internal representations: CompressedIRangesList or SimpleIRangesList. By default you get the first, which is more efficient than the second if the list is very long (e.g. has > 10000 list elements).

H.

ADD REPLY
0
Entering edit mode

I tried to use as(..., "IRangesList") and got:

Error in as(y, "IRangesList") :
  no method or default for coercing "list" to "IRangesList"

Is there a reason why one can not coerce a list to a IRangesList? What is more specific about IRangesList objects?

ADD REPLY
1
Entering edit mode

No particular reason. It was just missing. I added it to IRanges 2.9.20.

Cheers,

H.

ADD REPLY

Login before adding your answer.

Traffic: 535 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6