1. wrap in proto
When creating a list structure, try wrapping data frames in proto-objects:
library(proto) L <- list(a = proto(DF = BOD), b = proto(DF = BOD)) rapply(L, f = function(.) colSums(.$DF), how = "replace")
giving:
$a Time demand 22 89 $b Time demand 22 89
Wrap the result of your function in a proto-object, if you want more rapply it;
f <- function(.) proto(result = colSums(.$DF)) out <- rapply(L, f = f, how = "replace") str(out)
giving:
List of 2 $ a:proto object .. $ result: Named num [1:2] 22 89 .. ..- attr(*, "names")= chr [1:2] "Time" "demand" $ b:proto object .. $ result: Named num [1:2] 22 89 .. ..- attr(*, "names")= chr [1:2] "Time" "demand"
2. write your own alternative
recurse <- function (L, f) { if (inherits(L, "data.frame")) f(L) else lapply(L, recurse, f) } L <- list(a = BOD, b = BOD) recurse(L, colSums)
This gives:
$a Time demand 22 89 $b Time demand 22 89
ADDED: second approach
source share