From hpages at fredhutch.org  Tue Jan 30 23:32:16 2018
From: hpages at fredhutch.org (=?UTF-8?B?SGVydsOpIFBhZ8Oocw==?=)
Date: Tue, 30 Jan 2018 14:32:16 -0800
Subject: [Rd] as.list method for by Objects
In-Reply-To: <02275be4-b015-0860-8733-efb2b6b17996@fredhutch.org>
References: <SY3PR01MB07474F9CEBBC61FD2A152E58CDE40@SY3PR01MB0747.ausprd01.prod.outlook.com>
 <02275be4-b015-0860-8733-efb2b6b17996@fredhutch.org>
Message-ID: <83a450e6-61a7-3e19-a42d-7e496bb82140@fredhutch.org>

On 01/30/2018 02:24 PM, Herv? Pag?s 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")
         ^^^^^^^^^^^
oops, I meant as.list.by, sorry...

H.

> 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.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: hpages at fredhutch.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319



[Rd] as.list method for by Objects
=?UTF-8?B?SGVydsOpIFBhZ8Oocw==?=