2017-07-21 2 views
0

Dire que j'ai deux listes, contenant chacun des sous-éléments multiples:Façon simple de combiner chaque élément de deux listes complexes dans R?

l1 <- list(c(1933:1935),c(1950:1954), c(2012:2013)) #groups of years 
l2 <- list(c(19:21),c(19:24),c(22:26))    #groups of plot numbers 

Je veux créer une nouvelle liste (nous l'appellerons « l3 ») de sous-listes dans lequel:

  • chaque élément de ma nouvelle liste (l3) correspond à chaque élément de l1

    • dans ce cas, a 3 l1 éléments (contenant chacun des nombres variables d'années), je veux donc l3 avoir aussi 3 éléments principaux.
  • dans un élément donné de l3, je veux chaque année indiquée dans l'élément correspondant de l1 à contenir tous l2 éléments au sein le même élément de l2

Le résultat ressemblerait :

> l3 
[[1]] 
[[1]] 
[1] 19 20 21 

[[1]] 
[[2]] 
[1] 19 20 21 

[[1]] 
[[3]] 
[1] 19 20 21 

[[2]] 
[[1]] 
[1] 19 20 21 22 23 24 

[[2]] 
[[2]] 
[1] 19 20 21 22 23 24 

[[2]] 
[[3]] 
[1] 19 20 21 22 23 24 

[[2]] 
[[4]] 
[1] 19 20 21 22 23 24 

[[3]] 
[[1]] 
[1] 22 23 24 25 26 

[[3]] 
[[2]] 
[1] 22 23 24 25 26 

Répondre

0

Vous pouvez utiliser Map avec lapply, en fonction de la carte, pour chaque sous-liste de l1 retourner le vecteur number pour chaque année:

Map(function(years, numbers) lapply(years, function(x) numbers), l1, l2) 

[[1]] 
[[1]][[1]] 
[1] 19 20 21 

[[1]][[2]] 
[1] 19 20 21 

[[1]][[3]] 
[1] 19 20 21 


[[2]] 
[[2]][[1]] 
[1] 19 20 21 22 23 24 

[[2]][[2]] 
[1] 19 20 21 22 23 24 

[[2]][[3]] 
[1] 19 20 21 22 23 24 

[[2]][[4]] 
[1] 19 20 21 22 23 24 

[[2]][[5]] 
[1] 19 20 21 22 23 24 


[[3]] 
[[3]][[1]] 
[1] 22 23 24 25 26 

[[3]][[2]] 
[1] 22 23 24 25 26 

Ou une autre option, utilisez rep:

Map(function(n, v) rep(list(v), n), lengths(l1), l2)