返回遍历列表列表的循环内列表的名称

标签 r list loops

我有两个列表。

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

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

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

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

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

最佳答案

我们遍历 listnames打印

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/

相关文章:

r - dplyr 更新 data.frame 中的单元格

Python 查询最旧日期列表

java - 从给定 id 的 List<Obj> 获取 Obj,无需迭代整个 List

c++ - C C++ 数组....需要帮助理解代码

c - 通过调用函数打印 C 中数字范围的值

r - 动物园错误: length(time(x)) == length(by[[1]]) is not TRUE

r - 计算每个受试者在不同条件下的平均值

r - 如何从嵌套列表中提取每个 ggplot2 图

java - 在 Java 中使用长列表作为映射键

r - 列式计算