rapply to nested list of data frames in R

后端 未结 3 928
太阳男子
太阳男子 2020-12-20 14:48

i have a nested list whose fundamental element is data frames, and i want to traverse this list recursively to do some computation of each data frame, finally to get a neste

3条回答
  •  清歌不尽
    2020-12-20 15:35

    1. wrap in proto

    When creating your list structure try wrapping the 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 too if you want to further 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 rapply 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

提交回复
热议问题