Seite 1 von 1

Elemente mit gleichem Namen aus verschachtelter Liste auslesen

Verfasst: Mo Okt 01, 2018 12:39 pm
von WinterMensch
Hallo.
Ich habe ein Problem wofür ich selbst keine Lösung finden kann. Vielleicht gibt es ja hier jemanden, der eine Idee dazu hat.

Ich habe eine verschachtelte Liste. Es ist aber nicht bekannt wie viele Ebenen diese Liste besitzt. Hier ist ein Beispiel für solch eine Liste:

Code: Alles auswählen

nested_list2 = list(children = list(CV = list("hello"), 
                                   children = list(CV = list(subject = "sub", value = list(key = "1", var = "45")), 
                                                   children = list(CV = list("there"), 
                                                                   TE = list(subject = "sub2"))),
                                   other = list(sonstiges = "blabla"),
                                   TE = list(var = "varvar")))
Ich möchte alle Elemente extrahieren, die "CV" or "TE" heißen. Es kann aber auch Elemente in der Liste geben, die anders heißen. Deswegen reicht ein einfaches "unlist" nicht aus.

Das hier wäre mein gewünschter Output:

Code: Alles auswählen

exp_output2 = list(CV = list("hello"),
                   CV = list(subject = "sub", value = list(key = "1", var = "45")),
                   CV = list("there"),
                   TE = list(subject = "sub2"),
                   TE = list(var = "varvar"))
Ich weiß, dass die Elemente beim Output doppelte Namen haben können, allerdings benötige ich das Format genau so.

Für jegliche Hilfe bin ich dankbar. :)

Re: Elemente mit gleichem Namen aus verschachtelter Liste auslesen

Verfasst: Mo Okt 01, 2018 1:27 pm
von bigben
Klingt nach einem der seltenen Anwendungsfälle für rapply, ich kriege das mit der Abfrage auf den Namen "CV" aber grad nicht hin.

Re: Elemente mit gleichem Namen aus verschachtelter Liste auslesen

Verfasst: Mo Okt 01, 2018 1:36 pm
von WinterMensch
Ok, ich bin mir nicht sicher wie man rapply richtig anwendet. Ich habe es gerade so versucht:

Code: Alles auswählen

rapply(nested_list2, function(x) x[names(x)=="CV"], classes='ANY', how='replace')
Anscheinend werden auch alle Listenelemente durchlaufen aber immer nur "character(0)" zurückgegeben.. :|

Re: Elemente mit gleichem Namen aus verschachtelter Liste auslesen

Verfasst: Di Okt 02, 2018 10:55 am
von jogo
Ich habe Bedenken bezüglich des gewünschten Outputs, weil dort für verschiedene Element der gleiche Name verwendet werden soll.
Ein Ausweg könnte sein, unter einem Namen die betreffenden Elemente wieder in einer Liste zusammenzufassen.

Gruß, Jörg

Re: Elemente mit gleichem Namen aus verschachtelter Liste auslesen

Verfasst: Di Okt 02, 2018 9:48 pm
von EDi
Hört sich für mich nach tidyr::unnest() an, kann aber gerade nicht testen...