我有一个嵌套列表,顶部有两个或多个元素,我想修改子列表的命名元素,例如,通过添加来自命名向量的值。
假设L
是一个包含两个元素的列表,N
是一个具有相同元素数的向量:
L <- list(
foo = list(
x1=1,
x2=c(a=1, b=2)
),
bar = list(
x1=2,
x2=c(e=2, f=3)
)
)
N <- c(n=11, n=12)
然后我想得到这样的结果:
list(
foo = list(
x1=1,
x2=c(a=1, b=2, n=11)
),
bar = list(
x1=2,
x2=c(e=2, f=3, n=12)
)
)
子列表的元素很容易读取:
lapply(L, "[[", "x2")
所以我想知道是否有一种类似的紧凑的方法来改变元素。
我们可以使用Map
循环L
和N
的相应元素,提取'x2'分量并附加N
的值并返回,返回对象(x
)
L2 <- Map((x, y)
{
x$x2 <- c(x$x2, n=y)
x
}, L, N)
-检查OP的输出
> all.equal(L2, out)
[1] TRUE
或者以
命名赋值Map((x, y) {x$x2['n'] <- y; x}, L, N)