On 10/21/2015 03:36 PM, Michael Lawrence wrote:
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?
I think list sub-assignment should just call as.list() on the right
value if the value is not already a list. That way base R doesn't have
to choose whether S4 objects should be seen as "scalar" or as
"vector-like". This decision is now in the hands of the author of the
S4 class: if s/he chooses to have the "as.list" method for his/her
objects to just wrap the object in a list then s/he'll get the current
behavior (object treated as a scalar). If s/he chooses to have the
"as.list" method return a list parallel to the object then s/he'll get
list sub-assignment treat his/her objects as vector-like.
This principle can be extended to sub-assignments in general, not just
list sub-assignments: if the class of the right value in 'x[i] <- value'
doesn't extend the class of 'x', then 'value' should first be coerced
to the class of 'x':
if (!is(value, class(x))
value <- as(value, class(x))
Note that this is what the "[<-" method for Vector objects (defined
in S4Vectors) does (thru the default method for
normalizeSingleBracketReplacementValue).
Thanks,
H.
Michael
On Wed, Oct 21, 2015 at 11:14 AM, Hervé Pagès <hpa...@fredhutch.org
<mailto:hpa...@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.cast...@upf.edu <mailto:robert.cast...@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@r-project.org <mailto:Bioc-devel@r-project.org>
mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel
[[alternative HTML version deleted]]
_______________________________________________
Bioc-devel@r-project.org <mailto:Bioc-devel@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: hpa...@fredhutch.org <mailto:hpa...@fredhutch.org>
Phone: (206) 667-5791 <tel:%28206%29%20667-5791>
Fax: (206) 667-1319 <tel:%28206%29%20667-1319>
--
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: hpa...@fredhutch.org
Phone: (206) 667-5791
Fax: (206) 667-1319
_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel