Hoe kan ik een lijst met lijsten maken in R?

Ik weet niet hoe ik een lijst met lijsten moet maken in R.
Ik heb meerdere lijsten, ik wil ze in één datastructuur opslaan om ze makkelijker te kunnen benaderen. Het lijkt er echter op dat je geen lijst met lijsten in R kunt gebruiken, dus als ik lijst l1 van een andere lijst krijg, bijvoorbeeld l2, dan heb ik geen toegang tot elementen l1. Hoe kan ik het implementeren?

EDIT-ik zal een voorbeeld laten zien van wat niet voor mij werkt:

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

maar azou een lijst moeten zijn!


Antwoord 1, autoriteit 100%

Je kunt gemakkelijk lijsten met lijsten maken

list1 <- list(a = 2, b = 3)
list2 <- list(c = "a", d = "b")
mylist <- list(list1, list2)

mijnlijst is nu een lijst die twee lijsten bevat. Om toegang te krijgen tot lijst1 kun je mylist[[1]]gebruiken. Als je iets als mylist$list1wilt kunnen, dan moet je iets doen als

mylist <- list(list1 = list1, list2 = list2)
# Now you can do the following
mylist$list1

Bewerken: om te reageren op uw bewerking. Gebruik gewoon indexering met dubbele haakjes

a <- list_all[[1]]
a[[1]]
#[1] 1
a[[2]]
#[1] 2

Antwoord 2, autoriteit 18%

Uw voorbeeld gebruiken::

list1 <- list()
list1[1] = 1
list1[2] = 2
list2 <- list()
list2[1] = 'a'
list2[2] = 'b'
list_all <- list(list1, list2)

Gebruik ‘[[‘ om een element van een lijst op te halen:

b = list_all[[1]]
 b
[[1]]
[1] 1
[[2]]
[1] 2
class(b)
[1] "list"

Antwoord 3, autoriteit 14%

Als je een listvan lists probeert te behouden (vergelijkbaar met python‘s list.append()) dan zou dit kunnen werken:

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

Antwoord 4, autoriteit 4%

Het voorbeeld maakt een lijst met benoemde lijsten in een lus.

 MyList <- list()
  for (aName in c("name1", "name2")){
    MyList[[aName]] <- list(aName)
  }
  MyList[["name1"]]
  MyList[["name2"]]

Als u nog een lijst met de naam “naam3” wilt toevoegen, schrijft u:

 MyList$name3 <- list(1, 2, 3)

Antwoord 5

Zoals andere antwoorden al op een meer gecompliceerde manier hebben aangegeven, heb je aleen lijst met lijsten gemaakt! Het is gewoon de vreemde output van R die (iedereen?) verwart. Probeer dit:

> str(list_all)
List of 2
 $ :List of 2
  ..$ : num 1
  ..$ : num 2
 $ :List of 2
  ..$ : chr "a"
  ..$ : chr "b"

En de meest eenvoudige constructie zou deze zijn:

> 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"

Other episodes