Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to select elements with the same name from nested list with purrr?

Tags:

r

purrr

require(purrr)

list <- list( 
  node = list(a = list(y = 1, t = 1), b = list(y = 1, t = 2)),
  node = list(a = list(y = 1, t = 3), b = list(y = 1, t = 4))) 

How to select all "t" values with purrr?

like image 717
ZsideZ Avatar asked Sep 08 '17 20:09

ZsideZ


2 Answers

You can use modify_depth for this if you know what level you want to pull the information out of.

You want to pull t out for the nested lists, which is level 2.

modify_depth(list, 2, "t")

$node
$node$a
[1] 1

$node$b
[1] 2


$node
$node$a
[1] 3

$node$b
[1] 4

The purrr modify family of functions returns an object of the same type as the input, so you'd need to unlist to get a vector instead of a list.

like image 90
aosmith Avatar answered Oct 01 '22 08:10

aosmith


Here are some ideas using functions from purrr. Thanks for the great suggestions from @cderv.

Here is the first one. The use of pluck is similar to $.

list %>% flatten() %>% transpose() %>% pluck("t")
$a
[1] 1

$b
[1] 2

$a
[1] 3

$b
[1] 4

Here is the second one.

list %>% flatten() %>% map("t") 
$a
[1] 1

$b
[1] 2

$a
[1] 3

$b
[1] 4

Finally, if we want a vector, we can use map_dbl if we know the elements in t are all numeric.

list %>% flatten() %>% map_dbl("t")
a b a b 
1 2 3 4
like image 29
www Avatar answered Oct 01 '22 06:10

www