【问题标题】:How to subset a vector inside list of list如何对列表列表中的向量进行子集化
【发布时间】:2019-08-08 03:36:41
【问题描述】:

我有以下列表:

foo <- list(a = list(x = 1:10, y = 11:25), b = list(x = 1:10, y = 100:110))

看起来像这样:

> foo
$a
$a$x
 [1]  1  2  3  4  5  6  7  8  9 10

$a$y
 [1] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25


$b
$b$x
 [1]  1  2  3  4  5  6  7  8  9 10

$b$y
 [1] 100 101 102 103 104 105 106 107 108 109 110

我想要做的是只选择列表中的前 3 个产生:

$a
$a$x
 [1]  1  2  3  

$a$y
 [1] 11 12 13 


$b
$b$x
 [1]  1  2  3  

$b$y
 [1] 100 101 102

我怎样才能做到这一点?

【问题讨论】:

    标签: r list


    【解决方案1】:

    出现一个狂野的?rapply

    rapply(foo, f=head, n=3, how="list")
    #$a
    #$a$x
    #[1] 1 2 3
    #
    #$a$y
    #[1] 11 12 13
    #
    #
    #$b
    #$b$x
    #[1] 1 2 3
    #
    #$b$y
    #[1] 100 101 102
    

    这是一个recursive apply,它将遍历每个列表,直到找到一个非列表,然后应用f=unction。 how="list" 参数只是确保您再次获得相同的 list 结构。

    【讨论】:

      【解决方案2】:

      使用嵌套的lapply

      lapply(foo, lapply, `[`, 1:3)
      
      #$a
      #$a$x
      #[1] 1 2 3
      
      #$a$y
      #[1] 11 12 13
      
      
      #$b
      #$b$x
      #[1] 1 2 3
      
      #$b$y
      #[1] 100 101 102
      

      或使用head

      lapply(foo, lapply, head, 3)
      

      【讨论】:

        【解决方案3】:
        library(purrr)
        foo %>% map_depth(2,head,3)
        #$a
        #$a$x
        #[1] 1 2 3
        #
        #$a$y
        #[1] 11 12 13
        #
        #
        #$b
        #$b$x
        #[1] 1 2 3
        #
        #$b$y
        #[1] 100 101 102
        

        【讨论】:

          猜你喜欢
          • 2017-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-08
          • 2013-07-21
          • 1970-01-01
          • 2020-11-05
          相关资源
          最近更新 更多