rapply2d.Rd
rapply2d
is a recursive version of lapply
with three differences to rapply
:
data frames (or other list-based objects specified in classes
) are considered as atomic, not as (sub-)lists
FUN
is applied to all 'atomic' objects in the nested list
the result is not simplified / unlisted.
rapply2d(l, FUN, ..., classes = "data.frame")
a list.
a function that can be applied to all 'atomic' elements in l.
additional elements passed to FUN.
character. Classes of list-based objects inside l
that should be considered as atomic.
A list of the same structure as l
, where FUN
was applied to all atomic elements and list-based objects of a class included in classes
.
The main reason rapply2d
exists is to have a recursive function that out-of-the-box applies a function to a nested list of data frames.
For most other purposes rapply
, or by extension the excellent rrapply function / package, provide more advanced functionality and greater performance.
l <- list(mtcars, list(mtcars, as.matrix(mtcars)))
rapply2d(l, fmean)
#> [[1]]
#> mpg cyl disp hp drat wt qsec
#> 20.090625 6.187500 230.721875 146.687500 3.596562 3.217250 17.848750
#> vs am gear carb
#> 0.437500 0.406250 3.687500 2.812500
#>
#> [[2]]
#> [[2]][[1]]
#> mpg cyl disp hp drat wt qsec
#> 20.090625 6.187500 230.721875 146.687500 3.596562 3.217250 17.848750
#> vs am gear carb
#> 0.437500 0.406250 3.687500 2.812500
#>
#> [[2]][[2]]
#> mpg cyl disp hp drat wt qsec
#> 20.090625 6.187500 230.721875 146.687500 3.596562 3.217250 17.848750
#> vs am gear carb
#> 0.437500 0.406250 3.687500 2.812500
#>
#>
unlist2d(rapply2d(l, fmean))
#> .id.1 .id.2 mpg cyl disp hp drat wt qsec
#> 1 1 NA 20.09062 6.1875 230.7219 146.6875 3.596562 3.21725 17.84875
#> 2 2 1 20.09062 6.1875 230.7219 146.6875 3.596562 3.21725 17.84875
#> 3 2 2 20.09062 6.1875 230.7219 146.6875 3.596562 3.21725 17.84875
#> vs am gear carb
#> 1 0.4375 0.40625 3.6875 2.8125
#> 2 0.4375 0.40625 3.6875 2.8125
#> 3 0.4375 0.40625 3.6875 2.8125