首页 > 解决方案 > 在R中的索引上组合列表

问题描述

我有两个清单:

# 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"))
)

如何创建将vals附加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但两个列表的长度始终相同

标签: rlistpurrr

解决方案


我们可以使用嵌套的Map. 用循环遍历外部listMap然后从 中提取 'val' 组件inner list并将其分配给 second 的相应元素list

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

-检查OP的预期

all.equal(out, list_3)
#[1] TRUE

推荐阅读