【问题标题】:Return name of list inside loop that's looping through list of lists返回遍历列表列表的循环内列表的名称
【发布时间】:2019-06-25 23:47:26
【问题描述】:

我有两个列表。

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

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

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

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

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

【问题讨论】:

  • list1list2 构造为 vectors。你的意思是list1 &lt;- list('a', 5, 9)list2 &lt;- list('q', 42, 51)。你只需要names(metalist)
  • 是的,谢谢我编辑了这个问题。
  • 为什么不迭代列表名称呢?

标签: r list loops


【解决方案1】:

我们循环遍历nameslistprint

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]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2017-06-03
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多