Простой способ объединить КАЖДЫЙ элемент двух сложных списков в 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

Я хочу создать новый список (назовем его "l3") подсписков, в котором:

  • каждый элемент моего нового списка (l3) соответствует каждому элементу l1

    • in this case, l1 has 3 elements (each containing variable numbers of years), so I want l3 to have 3 main elements as well.
  • в заданном элементе l3 я хочу, чтобы каждый год, указанный в соответствующем элементе из l1, содержал все элементы l2 внутри одного и того же элемента l2

Результат будет выглядеть так:

> 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

person theforestecologist    schedule 21.07.2017    source источник


Ответы (1)


Вы можете использовать Map с lapply в функции карты для каждого подсписка l1 возвращать вектор number для каждого года:

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

Или другой вариант, используйте rep:

Map(function(n, v) rep(list(v), n), lengths(l1), l2)
person Psidom    schedule 21.07.2017