我有两个列表。
list1 <- list('a', 5, 9)
list2 <- list('q', 42, 51)
它们在一个更大的命名列表中。
metalist <- list()
metalist[['bob']] <- list1
metalist[['carol']] <- list2
如何从循环中返回每个列表的名称?我想返回 'bob'
,然后返回 'carol'
。以下代码不起作用,因为它查找 list1
和 list2
中的名称,而不是 metalist 中给出的
。list1
的名称
for(list in metalist) {
print(names(list))
}
最佳答案
我们遍历 list
的 names
并打印
它
for(nm in names(metalist)) print(nm)
#[1] "bob"
#[1] "carol"
注意
names(metalist)
会给出 'metalist' 中每个 list
元素的 names
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]])
关于返回遍历列表列表的循环内列表的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54478831/