代码之家  ›  专栏  ›  技术社区  ›  Rich Scriven

分析嵌套列表元素的更有效方法

r
  •  1
  • Rich Scriven  · 技术社区  · 10 年前

    我在发展 a function that parses a nested list 。不幸的是,由于原始数据的性质,我真的想不出这样做的方法。函数中的最后三位代码让我有点害怕,但它们确实完成了任务。它们是:

    mkList <- lapply(rec, function(x){
          lapply(regex, function(y) grep(y, x, value = TRUE)) })
    rem <- lapply(mkList, function(x){
          lapply(x, function(y) sub("[a-z]+,", "", y)) })
    lapply(rem, read.as.csv)
    

    是的,你没看错,这是连续5次呼叫 lapply 是的,你猜对了, read.as.csv 也可以调用 叠层的


    要制作一个可重复的小示例,请考虑嵌套列表 x 和下一个“双” 叠层的 大块结果正是我想要的,但我很好奇

    有没有更好、更有效的方法将函数应用于嵌套列表的内部列表?

    内部列表元素是字符串长度不同的csv矢量。

    > ( x <- list(list(a = c("a,b,c", "d,e,f"), 
                       b = c("1,2,a,b,c,d", "3,4,e,f,g,h"))) )
    
    # [[1]]
    # [[1]]$a
    # [1] "a,b,c" "d,e,f"
    #
    # [[1]]$b
    # [1] "1,2,a,b,c,d" "3,4,e,f,g,h"
    
    > lapply(x, function(y){
          lapply(y, function(z) do.call(rbind, strsplit(z, ",")))
      })
    
    # [[1]]
    # [[1]]$a
    #      [,1] [,2] [,3]
    # [1,] "a"  "b"  "c" 
    # [2,] "d"  "e"  "f" 
    # 
    # [[1]]$b
    #      [,1] [,2] [,3] [,4] [,5] [,6]
    # [1,] "1"  "2"  "a"  "b"  "c"  "d" 
    # [2,] "3"  "4"  "e"  "f"  "g"  "h" 
    
    1 回复  |  直到 10 年前
        1
  •  3
  •   A5C1D2H2I1M1N2O1R2T1    10 年前

    *apply 家庭是 rapply --用于“递归” lapply “。看起来你想做的是:

    rapply(x, function(y) do.call(rbind, strsplit(y, ",", TRUE)), how = "replace")
    # [[1]]
    # [[1]]$a
    #      [,1] [,2] [,3]
    # [1,] "a"  "b"  "c" 
    # [2,] "d"  "e"  "f" 
    # 
    # [[1]]$b
    #      [,1] [,2] [,3] [,4] [,5] [,6]
    # [1,] "1"  "2"  "a"  "b"  "c"  "d" 
    # [2,] "3"  "4"  "e"  "f"  "g"  "h" 
    

    对于这个特定的例子,这是你的方法的一个阴影,但是当你放大这个例子时,它被证明是更有效的。