将函数应用于列表后,保留列表元素的名称

时间:2019-07-25 22:34:21

标签: r list apply names

list1包含几个方阵,每个方阵都以此方式命名

$name1
           [,1]   [,2]   [,3]   [,4]   [,5]
 [1,] 0.1997578 0.0000 0.0000 0.0000 0.0000
 [2,] 0.0000000 0.2025 0.0000 0.0000 0.0000

我将eigen.analysis应用于list1,然后元素名称在结果(list2)中消失了。因此,在元素顺序不变的假设下,我必须使用list2的名称来重命名list1中的所有元素。如何解决我的代码,以便跳过名称重新分配步骤?谢谢!

list2<- lapply(seq_along(list1), function(i){
  eigen.analysis(list1[[i]])
})
names(list2) <- names(list1)

这是list2之前names()命令的样子

[[1]]
[[1]]$lambda1
[1] 0.2025

我希望我的结果会

$name1
$name1$lambda1
[1] 0.2025

lapply(seq_along())lapply(names())都使名字消失了。

1 个答案:

答案 0 :(得分:2)

与其使用lapply将函数应用于来自seq_along的索引,不应该将函数直接应用于list1

list2<- lapply(list1, function(x){
  eigen.analysis(x)
})
如果您以这种方式使用list2,则应命名

lapply()