Мне нужно базовое решение для объединения двух списков в конкретную вложенную структуру с сохранением атрибутов.
Использование c()
дает мне требуемую структуру, но атрибуты пропали.
Map(c, L1, L2)
# [[1]]
# [[1]][[1]]
# [1] 1 2
#
# [[1]][[2]]
# [1] 3 4
#
#
# [[2]]
# [[2]][[1]]
# [1] 1 2
#
# [[2]][[2]]
# [1] 3 4
Использование list()
сохраняет атрибуты, но я хочу, чтобы структура на один уровень была менее глубоко вложенной.
Map(list, L1, L2)
# [[1]]
# [[1]][[1]]
# [[1]][[1]][[1]]
# [1] 1 2
#
# attr(,"foo")
# [1] 42
#
# [[1]][[2]]
# [[1]][[2]][[1]]
# [1] 3 4
#
# attr(,"foo")
# [1] 42
#
#
# [[2]]
# [[2]][[1]]
# [[2]][[1]][[1]]
# [1] 1 2
#
# attr(,"foo")
# [1] 42
#
# [[2]][[2]]
# [[2]][[2]][[1]]
# [1] 3 4
#
# attr(,"foo")
# [1] 42
Наконец, следующий код дает мне то, что я хочу
lapply(1:2, function(i) {
r <- c(L1[[i]], L2[[i]])
r[[1]] <- `attributes<-`(r[[1]], attributes(L1[[i]]))
r[[2]] <- `attributes<-`(r[[2]], attributes(L2[[i]]))
r
})
Есть ливозможно, менее неловкий способ R сделать это?
Требуется вывод
# [[1]]
# [[1]][[1]]
# [1] 1 2
# attr(,"foo")
# [1] 42
#
# [[1]][[2]]
# [1] 3 4
# attr(,"foo")
# [1] 42
#
#
# [[2]]
# [[2]][[1]]
# [1] 1 2
# attr(,"foo")
# [1] 42
#
# [[2]][[2]]
# [1] 3 4
# attr(,"foo")
# [1] 42
Данные
L1 <- list(`attr<-`(list(1:2), "foo", 42), `attr<-`(list(1:2), "foo", 42))
L2 <- list(`attr<-`(list(3:4), "foo", 42), `attr<-`(list(3:4), "foo", 42))