Возвращает имя списка внутри цикла, который просматривает список списков - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть два списка.

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

1 Ответ

0 голосов
/ 01 февраля 2019

Мы перебираем names из list и print it

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

Обратите внимание, что

names(metalist)

даст names каждого list элемент в 'metalist'


Причина, по которой метод 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]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...