首页 > 解决方案 > 如何使用 lapply(seq_along()) 保留列表元素的名称?

问题描述

我想使用此代码在每个 lapply 序列之后保留我的数据框的名称。结果列表(list2)使我所有的数据框名称都消失了。我该如何改进它?谢谢你。

list2<-lapply(seq_along(list1), function(i, USE.NAMES=T){
  matrix_a%*%list1[[i]]
})

标签: rlapply

解决方案


不要使用seq_along循环遍历列表,直接执行。

lapply(list1, function(x) matrix_a %*% x)

lapply使用传递给它的对象的名称。

假设你list1是这样的

list1 <- list(x = structure(c(1L, 0L, 0L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 
3L, 0L, 0L, 0L, 0L, 4L), .Dim = c(4L, 4L)), y = structure(c(1L, 
0L, 0L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 3L, 0L, 0L, 0L, 0L, 4L), .Dim = c(4L, 4L)))

list1有名字

names(list1)
#[1] "x" "y"

seq_along(list1)没有名字。

names(seq_along(list1))
#NULL

因此, 的最终输出中不存在任何名称lapply


如果由于某种原因您必须通过索引,您可以稍后添加名称

setNames(lapply(seq_along(list1), function(i) matrix_a%*%list1[[i]]), names(list1))

推荐阅读