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<lig...@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....@cbs.dk Priv: pda...@gmail.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel