Как я могу сделать список списков в R?
Я не знаю, как составить список списков в R.
У меня есть несколько списков, я хочу хранить их в одной структуре данных, чтобы облегчить доступ к ним. Однако похоже, что вы не можете использовать список списков в R, поэтому если я получу список l1 из другого списка, скажем, l2, то я не смогу получить доступ к элементам l1. Как я могу это реализовать?
EDIT- Я покажу пример того, что у меня не работает:
list1 <- list()
list1[1] = 1
list1[2] = 2
list2 <- list()
list2[1] = 'a'
list2[2] = 'b'
list_all <- list(list1, list2)
a = list_all[1]
a[2]
#[[1]]
#NULL
но a
должен быть списком!
Ответы
Ответ 1
Вы можете легко составить списки списков
list1 <- list(a = 2, b = 3)
list2 <- list(c = "a", d = "b")
mylist <- list(list1, list2)
mylist теперь представляет собой список, содержащий два списка. Для доступа к списку1 вы можете использовать mylist[[1]]
. Если вы хотите иметь что-то вроде mylist$list1
, вам нужно сделать что-то вроде
mylist <- list(list1 = list1, list2 = list2)
# Now you can do the following
mylist$list1
Изменить: ответ на редактирование. Просто используйте индексирование с двумя скобками
a <- list_all[[1]]
a[[1]]
#[1] 1
a[[2]]
#[1] 2
Ответ 2
Используя ваш пример::
list1 <- list()
list1[1] = 1
list1[2] = 2
list2 <- list()
list2[1] = 'a'
list2[2] = 'b'
list_all <- list(list1, list2)
Используйте '[[' для извлечения элемента списка:
b = list_all[[1]]
b
[[1]]
[1] 1
[[2]]
[1] 2
class(b)
[1] "list"
Ответ 3
Если вы пытаетесь сохранить list
из list
(аналогично python
list.append()
), тогда это может сработать:
a <- list(1,2,3)
b <- list(4,5,6)
c <- append(list(a), list(b))
> c
[[1]]
[[1]][[1]]
[1] 1
[[1]][[2]]
[1] 2
[[1]][[3]]
[1] 3
[[2]]
[[2]][[1]]
[1] 4
[[2]][[2]]
[1] 5
[[2]][[3]]
[1] 6
Ответ 4
В примере создается список именованных списков в цикле.
MyList <- list()
for (aName in c("name1", "name2")){
MyList[[aName]] <- list(aName)
}
MyList[["name1"]]
MyList[["name2"]]
Чтобы добавить другой список с именем "name3", напишите:
MyList$name3 <- list(1, 2, 3)
Ответ 5
Как уже упоминалось в других ответах, вы уже создали список списков! Это просто странный вывод R, который смущает (всех?). Попробуйте следующее:
> str(list_all)
List of 2
$ :List of 2
..$ : num 1
..$ : num 2
$ :List of 2
..$ : chr "a"
..$ : chr "b"
И самой простой конструкцией было бы следующее:
> str(list(list(1, 2), list("a", "b")))
List of 2
$ :List of 2
..$ : num 1
..$ : num 2
$ :List of 2
..$ : chr "a"
..$ : chr "b"