[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