Hi Gabe,

Interestingly the behavior of as.list() on by objects seem to
depend on the object itself:

> b1 <- by(1:2, 1:2, identity)
> class(as.list(b1))
[1] "list"

> b2 <- by(warpbreaks[, 1:2], warpbreaks[,"tension"], summary)
> class(as.list(b2))
[1] "by"

This is with R 3.4.3 and R devel (2017-12-11 r73889).

H.

On 01/30/2018 02:33 PM, Gabriel Becker wrote:
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 <hpa...@fredhutch.org <mailto:hpa...@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@r-project.org <mailto:R-devel@r-project.org> mailing list
        
https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=8nXbMrKus1XsG7MluCRy3sluJKKhMVwOPHtudDpYJ4o&s=qDnEZOWalov3E9h1dajp8RLURfRz0-nbwH721jFAcEo&e=
        
<https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=8nXbMrKus1XsG7MluCRy3sluJKKhMVwOPHtudDpYJ4o&s=qDnEZOWalov3E9h1dajp8RLURfRz0-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: 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>


    ______________________________________________
    R-devel@r-project.org <mailto:R-devel@r-project.org> mailing list
    https://stat.ethz.ch/mailman/listinfo/r-devel
    
<https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=JIjTy48pWmEOxpHYM6DUHbRRSVwvOXOkgEFuoMhNkm0&s=x29ogWxfEnr2uKDcVEtKDWtB0USw8Xwm4f18WKBO-Dg&e=>




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

--
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

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to