修改base R中嵌套列表的元素,不进行循环



我有一个嵌套列表,顶部有两个或多个元素,我想修改子列表的命名元素,例如,通过添加来自命名向量的值。

假设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循环LN的相应元素,提取'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)

相关内容

  • 没有找到相关文章

最新更新