[Rd] value returned by by()

peter dalgaard pdalgd at gmail.com
Wed Sep 15 11:29:23 CEST 2010


On Sep 15, 2010, at 10:55 , Uwe Ligges wrote:

> 
> 
> On 14.09.2010 20:50, Seb wrote:
>> On Tue, 14 Sep 2010 12:02:04 +0200,
>> Uwe Ligges<ligges at statistik.tu-dortmund.de>  wrote:
>> 
>>> It returns a list with athe class attribut set to "by", just use: x<-
>>> by(.....)  unclass(x)
>> 
>> Thanks Uwe, however, that still returns an array when using the
>> data.frame method for by():
>> 
>> R>  class(unclass(with(warpbreaks, by(warpbreaks[, 1:2], tension, summary))))
>> [1] "array"
>> 
>> It seems as if the only way to really ensure a list:
>> 
>> R>  class(lapply(unclass(with(warpbreaks, by(warpbreaks[, 1:2], tension, summary))), function(x) x))
>> [1] "list"
>> 
>> but it seems like a waste to call another function just to do this.
>> 
>> 
> 
> Then you could still do
> 
> x <- by(.....)
> attributes(x) <- NULL
> 

Or just use c() instead of unclass(). (The root cause is that even with simplify=FALSE, tapply() will always create an array, in this case a 1d array with dim=3. The _contents_ of the array will be a list, though.)

Notice that in the relevant cases, what you get really _is_ a list, and both walks and quacks like one.  E.g.

> L <- with(warpbreaks, by(warpbreaks[, 1], tension, mean, simplify=FALSE))
> is.list(L)
[1] TRUE
> L$M
[1] 26.38889






-- 
Peter Dalgaard
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com



More information about the R-devel mailing list