首页 > 解决方案 > 返回遍历列表列表的循环内列表的名称

问题描述

我有两个清单。

list1 <- list('a', 5, 9)
list2 <- list('q', 42, 51)

它们在一个更大的命名列表中。

metalist <- list()
metalist[['bob']] <- list1
metalist[['carol']] <- list2

如何从循环内返回每个列表的名称?我想回来'bob'然后'carol'。以下代码不起作用,因为它查找的是 和 中的名称list1,而list2不是 中list1给出的名称metalist

for(list in metalist) {
  print(names(list))
}

标签: rlistloops

解决方案


我们循环遍历namesthelistprintit

for(nm in names(metalist)) print(nm)
#[1] "bob"
#[1] "carol"

注意

names(metalist)

将给出“金属主义者”names中每个list元素的


OP的方法给出NULL的原因是因为当我们将list元素提取到它的组件时

metalist[[1]]
#[[1]]
#[1] "a"

#[[2]]
#[1] 5

#[[3]]
#[1] 9

但是,如果它没有完全提取。即如果它仍然是一个list具有一个元素的对象

metalist[1]
#$bob
#$bob[[1]]
#[1] "a"

#$bob[[2]]
#[1] 5

#$bob[[3]]
#[1] 9

names(metalist[1])
#[1] "bob"

换句话说,names属性只是list. 所以,我们不能从内部提取,除非它通过names.

当循环遍历names组件时,可以使用[[

for(nm in names(metalist)) print(metalist[[nm]])

处理方便的选项list是应用家庭功能 ( lapply/sapply/..)

lapply(names(metalist), function(nm) metalist[[nm]])

推荐阅读