[Rd] as.list method for by Objects

Gabriel Becker gmbecker at ucdavis.edu
Tue Jan 30 23:33:24 CET 2018


Dario,

What version of R are you using. In my mildly old 3.4.0 installation and in
the version of Revel I have lying around (also mildly old...)  I don't see
the behavior I think you are describing

> b = by(1:2, 1:2, identity)

> class(as.list(b))

[1] "list"

> sessionInfo()

R Under development (unstable) (2017-12-19 r73926)

Platform: x86_64-apple-darwin15.6.0 (64-bit)

Running under: OS X El Capitan 10.11.6


Matrix products: default

BLAS:
/Users/beckerg4/local/Rdevel/R.framework/Versions/3.5/Resources/lib/libRblas.dylib

LAPACK:
/Users/beckerg4/local/Rdevel/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib


locale:

[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8


attached base packages:

[1] stats     graphics  grDevices utils     datasets  methods   base


loaded via a namespace (and not attached):

[1] compiler_3.5.0

>


As for by not having a class definition, no S3 class has an explicit
definition, so this is somewhat par for the course here...

did I misunderstand something?


~G

On Tue, Jan 30, 2018 at 2:24 PM, Hervé Pagès <hpages at fredhutch.org> wrote:

> I agree that it makes sense to expect as.list() to perform
> a "strict coercion" i.e. to return an object of class "list",
> *even* on a list derivative. That's what as( , "list") does
> by default:
>
>   # on a data.frame object
>   as(data.frame(), "list")  # object of class "list"
>                             # (but strangely it drops the names)
>
>   # on a by object
>   x <- by(warpbreaks[, 1:2], warpbreaks[,"tension"], summary)
>   as(x, "list")  # object of class "list"
>
> More generally speaking as() is expected to perform "strict
> coercion" by default, unless called with 'strict=FALSE'.
>
> That's also what as.list() does on a data.frame:
>
>   as.list(data.frame())  # object of class "list"
>
> FWIW as.numeric() also performs "strict coercion" on an integer
> vector:
>
>   as.numeric(1:3)  # object of class "numeric"
>
> So an as.list.env method that does the same as as(x, "list")
> would bring a small touch of consistency in an otherwise
> quite inconsistent world of coercion methods(*).
>
> H.
>
> (*) as(data.frame(), "list", strict=FALSE) doesn't do what you'd
>     expect (just one of many examples)
>
>
> On 01/29/2018 05:00 PM, Dario Strbenac wrote:
>
>> Good day,
>>
>> I'd like to suggest the addition of an as.list method for a by object
>> that actually returns a list of class "list". This would make it safer to
>> do type-checking, because is.list also returns TRUE for a data.frame
>> variable and using class(result) == "list" is an alternative that only
>> returns TRUE for lists. It's also confusing initially that
>>
>> class(x)
>>>
>> [1] "by"
>>
>>> is.list(x)
>>>
>> [1] TRUE
>>
>> since there's no explicit class definition for "by" and no mention if it
>> has any superclasses.
>>
>> --------------------------------------
>> Dario Strbenac
>> University of Sydney
>> Camperdown NSW 2050
>> Australia
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.et
>> hz.ch_mailman_listinfo_r-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84V
>> tBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=8nXbM
>> rKus1XsG7MluCRy3sluJKKhMVwOPHtudDpYJ4o&s=qDnEZOWalov3E9h1daj
>> p8RLURfRz0-nbwH721jFAcEo&e=
>>
>>
> --
> 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
>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



-- 
Gabriel Becker, PhD
Scientist (Bioinformatics)
Genentech Research

	[[alternative HTML version deleted]]



More information about the R-devel mailing list