使用lapply命名列表中的元素

时间:2018-06-05 16:15:21

标签: r

我正在学习如何使用lapply和其他人在复杂列表中访问列表元素。我需要在某些级别设置对象名称,但我一开始就陷入困境。所以让我们创建一个列表:

my_list=vector("list",3)#create empty list of 3 elements 
names(my_list)=c("1st.element","2nd.eleent","3rd.element")#set names(this is easy) 
my_list=lapply(my_list, function(x) x=vector("list",5))#each element is list consisting 5 elements

所以现在我想为每个元素设置名称。我知道如何使用for

执行此操作

for(i in 1:length(my_list)){names(my_list[[i]])=paste(names(my_list[i]),1:length(my_list[[i]]),sep=".")}

此循环的输出是我想要的输出。怎么实现呢?我尝试了与lapply不同的方法,最接近上面的代码是:

lapply(my_list[[i]],function(i)names(i)=paste(names(my_list[i]),1:length(my_list[[i]]),sep="."))

请记住,我仍然在学习apply功能。

1 个答案:

答案 0 :(得分:2)

我们可以使用Map遍历&{39; my_list'的names。和list本身,然后使用setNames命名单个嵌套的list元素

Map(function(x, y) setNames(x, paste0(y, seq_along(x)))
            , my_list,  names(my_list))

使用tidyverse的类似选项是

library(purrr)
map2(my_list, names(my_list), ~ set_names(.x, paste0(.y, seq_along(.x))))

或者代替map2imaplist的名称设为.y(如@Moody_Mudskipper所评论)

imap(my_list, ~ set_names(.x, paste0(.y, seq_along(.x))))