[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