如何使用lapply(seq_along())保留列表元素的名称?

时间:2019-12-06 00:38:03

标签: r lapply

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

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

2 个答案:

答案 0 :(得分:2)

请勿使用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))

答案 1 :(得分:1)

我们也可以使用Map

Map(`%*%`, list(matrix_a), list1)