【问题标题】:Apply function to nested loop (purrr package?)将函数应用于嵌套循环(purrr 包?)
【发布时间】:2018-01-17 17:26:28
【问题描述】:

这个应该很简单,但是我搞不定……

我想应用一个功能,例如。意味着每个较低的列表, 例如。我想回来

$1

$1$a [1] value_of_mean 1

$1$b [1] value_of_mean 2

$2

$2$a [1] value_of_mean 3

$2$b [1] value_of_mean 4

我正在尝试使用 purrr 包

require(purrr)    
mylist <- list("1"=list(a=runif(10), b=runif(10)), "2"=list(a=runif(10), b=runif(10)))
        map(mylist, mean)

【问题讨论】:

    标签: r purrr


    【解决方案1】:

    您可以调用map 两次来完成此操作。这将遍历顶级列表中的每个列表,并对该顶级列表的每个元素(即底层列表)执行平均值:

    mylist %>% map(~ map(.x, mean))
    

    给你这个:

    $`1`
    $`1`$a
    [1] 0.5734347
    
    $`1`$b
    [1] 0.5321065
    
    
    $`2`
    $`2`$a
    [1] 0.483521
    
    $`2`$b
    [1] 0.5138651
    

    【讨论】:

      【解决方案2】:

      您不必使用两次map,因为引入了modify_depth 来整理双重map 调用。

      library(purrr)
      
      set.seed(123)
      
      mylist <- list("1"=list(a=runif(10), b=runif(10)), "2"=list(a=runif(10), b=runif(10)))
      
      modify_depth(mylist, 2, mean)
      

      导致:

      > modify_depth(mylist, 2, mean)
      $`1`
      $`1`$a
      [1] 0.5782475
      
      $`1`$b
      [1] 0.5233693
      
      
      $`2`
      $`2`$a
      [1] 0.6155837
      
      $`2`$b
      [1] 0.537858
      

      这是一样的

      mylist %>% map(~ map(.x, mean))
      

      导致:

      > mylist %>% map(~ map(.x, mean))
      $`1`
      $`1`$a
      [1] 0.5782475
      
      $`1`$b
      [1] 0.5233693
      
      
      $`2`
      $`2`$a
      [1] 0.6155837
      
      $`2`$b
      [1] 0.537858
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-28
        • 2021-02-28
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        • 2012-04-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多