Как легко объединить вложенные списки без потери атрибутов? - PullRequest
1 голос
/ 01 ноября 2019

Мне нужно базовое решение для объединения двух списков в конкретную вложенную структуру с сохранением атрибутов.

Использование 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...