R - Listen mit Überschreiben und Rekursion zusammenführen

8

Angenommen, ich habe zwei Listen mit Namen,

%Vor%

Ich möchte diese Listen rekursiv zusammenführen und Einträge überschreiben, wenn das zweite Argument widersprüchliche Werte enthält. I.e. die erwartete Ausgabe wäre

%Vor%

Irgendein Hinweis?

    
zeeMonkeez 11.12.2012, 00:06
quelle

2 Antworten

9

Ich denke, dass Sie hier Ihre eigene rekursive Funktion schreiben müssen.

Eine Funktion, die zwei Listen akzeptiert, list1 und list2 . Wenn:

  • list1[[name]] existiert, aber nicht list2[[name]] , verwenden Sie list1[[name]] ;
  • list1[[name]] existiert ebenso wie list2[[name]] und beide sind keine Listen, verwenden Sie list2[[name]] ;
  • Andernfalls rekursieren Sie mit list1[[name]] und list2[[name]] als neue Listen.

Etwas wie:

%Vor%

Vorbehalte - Wenn Ihre Listen verschmolzen sind, können Sie seltsame Ergebnisse erzielen. Zum Beispiel:

%Vor%

Dann hat Ihre zusammengeführte Liste a=2, b=3 . Dies liegt daran, dass der Wert von b$a den Wert von a$a überschreibt, obwohl a$a eine Liste ist (Sie haben nicht angegeben, was passieren würde, wenn dies der Fall wäre). Es ist jedoch einfach genug, myMerge zu modifizieren, um diese Art von Fällen zu behandeln. Erinnern Sie sich einfach - verwenden Sie is.list , um zu testen, ob es eine Liste ist, und is.null(myList$a) , um zu sehen, ob der Eintrag a in der Liste myList existiert.

Hier ist die "vektorisierte" Version mit sapply :

%Vor%     
mathematical.coffee 11.12.2012, 00:24
quelle
6

Ich bin mir nicht sicher, ob hier eine benutzerdefinierte Funktion notwendig ist. Es gibt eine Funktion utils::modifyList() , um genau diese Operation auszuführen! Weitere Informationen finden Sie modifyList .

%Vor%

Welche gibt das folgende

%Vor%     
Arun Balakrishnan 16.06.2016 10:22
quelle

Tags und Links