объединить списки по индексу в R - PullRequest
1 голос
/ 17 апреля 2020

У меня есть два списка:

# agg blocks don't need methods
list_1 <- list(
  foo = list(list(txt = "MEAN", val= "NONE")),
  foo = list(list(txt = "MEAN", val= "Week 54")),
  foo = list(list(txt = "FREQ", df= "df"))
)

# 
list_2 <- list(
  foo = list(list(txt = "TEXT", df = "df_1")),
  foo = list(list(txt = "SAMPLE ", df = "df_2")),
  foo = list(list(txt = "OTHER", df = "df_1"))
)

Как создать третий список, который добавляет val s из list_1 в list_2

Желаемый вывод

list_3 <- list(
  foo = list(list(txt = "TEXT", df = "df_1", val = "NONE")),
  foo = list(list(txt = "SAMPLE ", df = "df_2", val = "Week 54")),
  foo = list(list(txt = "OTHER", df = "df_1"))
)
$foo
$foo[[1]]
$foo[[1]]$txt
[1] "TEXT"

$foo[[1]]$df
[1] "df_1"

$foo[[1]]$val
[1] "NONE"



$foo
$foo[[1]]
$foo[[1]]$txt
[1] "SAMPLE "

$foo[[1]]$df
[1] "df_2"

$foo[[1]]$val
[1] "Week 54"



$foo
$foo[[1]]
$foo[[1]]$txt
[1] "OTHER"

$foo[[1]]$df
[1] "df_1"

Обратите внимание, что некоторые элементы списка отсутствуют val, но два списка всегда будут иметь одинаковую длину

1 Ответ

1 голос
/ 17 апреля 2020

Мы можем сделать это с вложенным Map. L oop поверх внешнего list с помощью Map, затем извлеките компонент 'val' из inner list и назначьте его соответствующему элементу второго list

out <- Map(function(lst1, lst2) Map(c, lst2, val =
         lapply(lst1, `[[`, 'val')), list_1, list_2)

-проверка с ожидаемым ОП

all.equal(out, list_3)
#[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...