Объединить два списка с одинаковыми именами элементов в список списков по имени элемента R - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть два списка, один с матрицами и один с векторами. Оба назвали элементы, которые равны. Это выглядит так:

set.seed(1)
mat_list <- list("2009" = matrix(runif(n = 9, min = 0, max = 10), 3, 3),
                 "2010" = matrix(runif(n = 9, min = 0, max = 10), 3, 3))
vec_list <- list("2009" = c(runif(n = 3, min = 0, max = 10)),
                 "2010" = c(runif(n = 3, min = 0, max = 10)))

Я хочу создать новый список с элементами 2009 и 2010, который содержит соответствующую матрицу и вектор, чтобы я мог получить доступ к ним обоим при вызове lapply. У моего фактического данных есть еще несколько лет, поэтому я был бы рад, если бы не указывать эти годы в явном виде.

Я нашел кучу похожих вопросов, но не мог понять, как применить ответы к моей ситуации. Спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018

С пакетом purrr и функцией map2 вы можете сделать это:

#install_packages("purrr")
set.seed(1)
mat_list <- list("2009" = matrix(runif(n = 9, min = 0, max = 10), 3, 3),
                 "2010" = matrix(runif(n = 9, min = 0, max = 10), 3, 3))
vec_list <- list("2009" = c(runif(n = 3, min = 0, max = 10)),
                 "2010" = c(runif(n = 3, min = 0, max = 10)))

l <- purrr::map2(mat_list, vec_list, function(x,y) list(x,y))
#l <- purrr::map2(mat_list, vec_list, ~list(.x,.y)) #shorter notation
#l <- purrr::map2(mat_list, vec_list, list) #even shorter

#x and y inside the map2 are the elements of each list at each iteration, 
#so we can combine them in a list

Благодаря @markus:

l <- Map(list, mat_list, vec_list) # no need for another package
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...