Добавьте каждый элемент из одного списка в соответствующий элемент другого списка в R - PullRequest
0 голосов
/ 14 января 2020

У меня есть два списка одинаковой длины, я хочу добавить первый элемент второго списка в первый элемент первого списка и так далее. вот мой пример: # фиктивные данные -

m1<- matrix(c(2,3,4,5), nrow = 2, ncol = 2)
m2<- matrix(c(1,2 ,3,4,5,6), nrow = 2, ncol = 3)
m3<- matrix(c(1,10,6,8 ,3,4,5,6), nrow = 4, ncol = 2)
 m4<-matrix(c(2,5,9,11), nrow = 2,ncol = 2)
 list1 <- list(list(x= c(m1,m4, m3), y=c(m1,m2,m3), z=c(m1,m2,m4)),list(x= c(m4,m2, m3), y=c(m1,m2,m4), z=c(m2,m2,m3)),list(x= c(m1,m2, m3), y=c(m1,m2,m3), z=c(m1,m2,m3)))
list2<- list(list(f=m4),list( g=m4),list( h=m2))

код для достижения того, что я хочу

list1[[1]][[4]]<- list2[[1]][[1]]
list1[[2]][[4]]<- list2[[2]][[1]]
list1[[3]][[4]]<- list2[[3]][[1]]
names(list1[[1]])<- c("x","y","z","f")
names(list1[[2]])<- c("x","y","z","g")
names(list1[[3]])<- c("x","y","z","h")

# Мой вопрос, как я могу сделать то же самое с l oop или, к счастью, мои реальные данные очень длинные списки, а не только длина 3.

1 Ответ

1 голос
/ 14 января 2020

Мы можем использовать Map и комбинировать соответствующие элементы каждого списка.

Map(c, list1, list2)

#[[1]]
#[[1]]$x
# [1]  2  3  4  5  2  5  9 11  1 10  6  8  3  4  5  6

#[[1]]$y
# [1]  2  3  4  5  1  2  3  4  5  6  1 10  6  8  3  4  5  6

#[[1]]$z
# [1]  2  3  4  5  1  2  3  4  5  6  2  5  9 11

#[[1]]$f
#     [,1] [,2]
#[1,]    2    9
#[2,]    5   11
#....

, что аналогично map2 из purrr

purrr::map2(list1, list2, c)
...