[Bioc-devel] VariantAnnotation::VRanges() & defunct ifelse method for Rle objects in devel IRanges

Michael Lawrence lawrence.michael at gene.com
Thu Oct 22 00:36:00 CEST 2015


That sucks. I was thinking we could easily make R smarter about
sub-assignment, so that base::ifelse would just work with value Rle, as
would [<- in general. The C code would just call as.vector() on the object.
The problem is that S4 objects are seen by that code as "scalar" and are
wrapped in a list when sub-assigned into one:

> l <- list()
> l[1] <- Rle(3:1)
> l
[[1]]
integer-Rle of length 3 with 3 runs
  Lengths: 1 1 1
  Values : 3 2 1

But that behavior is inconsistent within the base package, because
lapply(), mapply() etc assume an S4 object is vector-like. I'm interested
in your opinion. Should we deprecate the list sub-assignment behavior?

Michael


On Wed, Oct 21, 2015 at 11:14 AM, Hervé Pagès <hpages at fredhutch.org> wrote:

> Hi Michael,
>
> On 10/21/2015 07:09 AM, Michael Lawrence wrote:
>
>> News to me. Why was this deprecated? Why can't the ifelse() method just do
>> what it is now telling the user to do? Is it to make the inefficiency of
>> the implementation more obvious?
>>
>
> There was some discussion about this here:
>
>   https://support.bioconductor.org/p/70871/
>
> I should probably have brought this to bioc-devel before making that
> change, sorry. I'll be happy to bring these methods back if there is a
> way to preserve the semantic of base::ifelse() (which relies on delayed
> evaluation of the 'yes' and 'no' arguments).
>
> H.
>
> The goal with Rle was to make it behave as
>> conveniently and as vector-like as possible.
>>
>>
>>
>> On Wed, Oct 21, 2015 at 6:50 AM, Robert Castelo <robert.castelo at upf.edu>
>> wrote:
>>
>> hi,
>>>
>>> one of the recent changes in the devel IRanges has been to defunct the
>>> 'ifelse' method for 'Rle' objects. This was warned during the previous
>>> devel cycle and so it does with current release.
>>>
>>> One of the affected functions is the VRanges object constructor,
>>> 'VRanges()'. Since I use this function within my package
>>> VariantFiltering,
>>> this is now precluding it to build.
>>>
>>> I would like to ask whether you could fix the VRanges constructor to
>>> comply with the new requirement on the 'ifelse' method for 'Rle' objects.
>>>
>>> please find below a reproducible example for release and devel with
>>> corresponding session information.
>>>
>>> thanks!!
>>>
>>> robert.
>>>
>>> ============================================
>>>
>>> This is what happens in current release:
>>>
>>> library(VariantAnnotation)
>>>
>>>
>>> VRanges()
>>> VRanges object with 0 ranges and 0 metadata columns:
>>>     seqnames    ranges strand         ref              alt totalDepth
>>>   refDepth       altDepth   sampleNames softFilterMatrix
>>>        <Rle> <IRanges>  <Rle> <character> <characterOrRle> <integerOrRle>
>>> <integerOrRle> <integerOrRle> <factorOrRle>         <matrix>
>>>    -------
>>>    seqinfo: no sequences
>>>    hardFilters: NULL
>>> Warning messages:
>>> 1:   The "ifelse" methods for Rle objects are deprecated. Please use
>>>
>>>        as(ifelse(test, as.vector(yes), as.vector(no)), "Rle")
>>>
>>>    instead.
>>> 2:   The "ifelse" methods for Rle objects are deprecated. Please use
>>>
>>>        as(ifelse(test, as.vector(yes), as.vector(no)), "Rle")
>>>
>>>    instead.
>>>
>>> sessionInfo()
>>> R version 3.2.2 (2015-08-14)
>>> Platform: x86_64-pc-linux-gnu (64-bit)
>>> Running under: Fedora release 12 (Constantine)
>>>
>>> locale:
>>>   [1] LC_CTYPE=en_US.UTF8       LC_NUMERIC=C LC_TIME=en_US.UTF8
>>> LC_COLLATE=en_US.UTF8 LC_MONETARY=en_US.UTF8
>>>   [6] LC_MESSAGES=en_US.UTF8    LC_PAPER=en_US.UTF8       LC_NAME=C
>>>       LC_ADDRESS=C              LC_TELEPHONE=C
>>> [11] LC_MEASUREMENT=en_US.UTF8 LC_IDENTIFICATION=C
>>>
>>> attached base packages:
>>> [1] stats4    parallel  stats     graphics  grDevices utils     datasets
>>> methods   base
>>>
>>> other attached packages:
>>>   [1] VariantAnnotation_1.16.0   Rsamtools_1.22.0 Biostrings_2.38.0
>>>    XVector_0.10.0 SummarizedExperiment_1.0.0
>>>   [6] Biobase_2.30.0             GenomicRanges_1.22.0 GenomeInfoDb_1.6.0
>>>       IRanges_2.4.0              S4Vectors_0.8.0
>>> [11] BiocGenerics_0.16.0        vimcom_1.2-3 setwidth_1.0-4
>>>   colorout_1.1-0
>>>
>>> loaded via a namespace (and not attached):
>>>   [1] AnnotationDbi_1.32.0    GenomicAlignments_1.6.0 zlibbioc_1.16.0
>>>   BiocParallel_1.4.0      BSgenome_1.38.0         tools_3.2.2
>>>   [7] DBI_0.3.1               lambda.r_1.1.7 futile.logger_1.4.1
>>>   rtracklayer_1.30.0      futile.options_1.0.0 bitops_1.0-6
>>> [13] RCurl_1.95-4.7          biomaRt_2.26.0          RSQLite_1.0.0
>>> GenomicFeatures_1.22.0  XML_3.98-1.3
>>>
>>>>
>>>>
>>>
>>> This is what happens in current devel:
>>>
>>> library(VariantAnnotation)
>>>
>>> VRanges()
>>> Error:   The "ifelse" methods for Rle objects are defunct. Please use
>>>
>>>        as(ifelse(test, as.vector(yes), as.vector(no)), "Rle")
>>>
>>>    instead.
>>> sessionInfo()
>>> R Under development (unstable) (2015-10-14 r69514)
>>> Platform: x86_64-pc-linux-gnu (64-bit)
>>> Running under: Fedora release 12 (Constantine)
>>>
>>> locale:
>>>   [1] LC_CTYPE=en_US.UTF8       LC_NUMERIC=C LC_TIME=en_US.UTF8
>>>   [4] LC_COLLATE=en_US.UTF8     LC_MONETARY=en_US.UTF8
>>> LC_MESSAGES=en_US.UTF8
>>>   [7] LC_PAPER=en_US.UTF8       LC_NAME=C                 LC_ADDRESS=C
>>> [10] LC_TELEPHONE=C            LC_MEASUREMENT=en_US.UTF8
>>> LC_IDENTIFICATION=C
>>>
>>> attached base packages:
>>> [1] stats4    parallel  stats     graphics  grDevices utils     datasets
>>> methods   base
>>>
>>> other attached packages:
>>>   [1] VariantAnnotation_1.17.0   Rsamtools_1.23.0 Biostrings_2.39.0
>>>   [4] XVector_0.11.0             SummarizedExperiment_1.1.0
>>> Biobase_2.31.0
>>>   [7] GenomicRanges_1.21.32      GenomeInfoDb_1.7.0 IRanges_2.5.1
>>> [10] S4Vectors_0.9.2            BiocGenerics_0.17.0        vimcom_1.0-0
>>> [13] setwidth_1.0-4             colorout_1.0-3
>>>
>>> loaded via a namespace (and not attached):
>>>   [1] AnnotationDbi_1.33.0    GenomicAlignments_1.7.0 zlibbioc_1.17.0
>>>   BiocParallel_1.5.0
>>>   [5] BSgenome_1.39.0         tools_3.3.0             DBI_0.3.1
>>>   lambda.r_1.1.7
>>>   [9] futile.logger_1.4.1     rtracklayer_1.31.0 futile.options_1.0.0
>>> bitops_1.0-6
>>> [13] RCurl_1.95-4.7          biomaRt_2.27.0          RSQLite_1.0.0
>>> GenomicFeatures_1.23.3
>>> [17] XML_3.98-1.3
>>>
>>> _______________________________________________
>>> Bioc-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>>>
>>>
>>         [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> Bioc-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>>
>>
> --
> Hervé Pagès
>
> Program in Computational Biology
> Division of Public Health Sciences
> Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N, M1-B514
> P.O. Box 19024
> Seattle, WA 98109-1024
>
> E-mail: hpages at fredhutch.org
> Phone:  (206) 667-5791
> Fax:    (206) 667-1319
>

	[[alternative HTML version deleted]]



More information about the Bioc-devel mailing list