[Rd] as.list method for by Objects

Michael Lawrence lawrence.michael at gene.com
Tue Jan 30 23:50:10 CET 2018


by() does not always return a list. In Gabe's example, it returns an
integer, thus it is coerced to a list. as.list() means that it should be a
VECSXP, not necessarily with "list" in the class attribute.

Michael

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

> 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/Resour
>> ces/lib/libRblas.dylib
>>
>>     LAPACK:
>>     /Users/beckerg4/local/Rdevel/R.framework/Versions/3.5/Resour
>> ces/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
>> <mailto: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 <mailto: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=
>>         <https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.
>> ethz.ch_mailman_listinfo_r-2Ddevel&d=DwICAg&c=eRAMFD45gAf
>> qt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=
>> 8nXbMrKus1XsG7MluCRy3sluJKKhMVwOPHtudDpYJ4o&s=qDnEZOWalov3E9
>> h1dajp8RLURfRz0-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 <mailto:hpages at fredhutch.org>
>>     Phone: (206) 667-5791 <tel:%28206%29%20667-5791>
>>     Fax: (206) 667-1319 <tel:%28206%29%20667-1319>
>>
>>
>>     ______________________________________________
>>     R-devel at r-project.org <mailto:R-devel at 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=eRAMFD45gAf
>> qt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=
>> JIjTy48pWmEOxpHYM6DUHbRRSVwvOXOkgEFuoMhNkm0&s=x29ogWxfEnr2uK
>> DcVEtKDWtB0USw8Xwm4f18WKBO-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: 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
>

	[[alternative HTML version deleted]]



More information about the R-devel mailing list