将函数应用于嵌套循环(purrr包?)

时间:2018-01-17 17:26:29

标签: r purrr

这应该很简单,但我无法解决这个问题......

我想申请一个功能,例如。对每个较低的列表意味着什么, 例如。我想回来

  

$ 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)

2 个答案:

答案 0 :(得分:2)

您可以拨打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

答案 1 :(得分:1)

您不必使用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