Is it possible to get something like rapply for a data.frame? For example, if I do this: > x <- list(a=mtcars, b=mtcars) > str(rapply(x, nrow, classes="data.frame", how="replace")) List of 2 $ a:List of 11 ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... ..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ... ..$ disp: num [1:32] 160 160 108 258 360 ... ..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ... ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... ..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ... ..$ qsec: num [1:32] 16.5 17.0 18.6 19.4 17.0 ... ..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ... ..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ... ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ... ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ... $ b:List of 11 ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... ..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ... ..$ disp: num [1:32] 160 160 108 258 360 ... ..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ... ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... ..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ... ..$ qsec: num [1:32] 16.5 17.0 18.6 19.4 17.0 ... ..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ... ..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ... ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ... ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ... I was hoping to get something like list(a=11, b=11). I suspect this is because the data.frame is actually implemented as a list.
Michael Hoffman wrote:> Is it possible to get something like rapply for a data.frame?On second thought, I can do something like this: happly <- function(x, fun) { if (class(x) == "list") { lapply(x, happly, fun) } else { fun(x) } } > happly(list(a=list(c=mtcars, d=Titanic), x=mtcars), nrow) $a $a$c [1] 32 $a$d [1] 4 $x [1] 32 Better suggestions welcome.