2016-08-02 18 views
1

Ich habe eine Liste von Datenrahmen, wo ich versuche, alle Elemente der Liste in einen einzelnen Datenrahmen zusammenzuführen, indem Sie merge() anwenden. Ich suche nach einer allgemeinen Lösung, die verschiedene Funktionen und eine große Anzahl von Elementen der Liste verarbeiten kann.R: rekursiv Operationen auf einer Liste ausführen

Für ein praktisches Arbeitsbeispiel verwenden wir ein verwandtes Problem, das dieselbe Lösung haben sollte. So gehen wir davon aus, anstatt eine Liste von Zahlen haben:

foo <- list(1, 2, 478, 676) 

Nehmen wir weiter an, dass ich ein Skript zu schreiben versuche, die die erste Zahl nimmt und teilt es durch die zweite. Es nimmt dann diesen Quotienten und teilt ihn durch den dritten. Es nimmt dann diesen Quotienten und teilt ihn durch den vierten usw. Am Ende habe ich eine einzelne Zahl in einem einzigen Objekt gespeichert. Zum Beispiel:

((foo[1]/foo[2])/foo[3])/foo[4] 

Ich habe rapply() für rekursiven Operationen auf Listen gesehen, aber alle Beispiele sind für das Delisting-Listen und nicht auf andere Vorgänge, wie merge() oder arithmetische Operationen.

+1

'Reduce (Funktion (a, b) a/b, foo)' tut, was Sie hier vorgeschlagen haben, könnte es nicht für Ihr Gesamtproblem gelten. – r2evans

+2

Dann aktualisieren Sie bitte Ihre Frage mit einem angemesseneren Beispiel. Wir können nicht helfen, wenn wir die Struktur Ihrer Daten nicht verstehen. (Gute Referenzen: [help/mcve] (http://stackoverflow.com/help/mcve) und [reproduzierbare Beispiele] (http://stackoverflow.com/questions/5963269/how-to-make-a-great- r-reproduzierbar-Beispiel).) – r2evans

+0

Sind Sie sicher, dass Sie rekursiv meinen? Sie haben in Ihrem Beispiel nicht wirklich eine verschachtelte Struktur? Sie scheinen einen iterativen Prozess zu beschreiben, für den Reduce genau das Richtige ist. Ich stimme zu, dass Sie ein viel besseres Beispiel brauchen, um den Unterschied deutlicher zu machen. Wenn Sie eine Liste von data.frames haben, können Sie sie mit 'Reduce (Zusammenführen, Auflisten (data.frame (a = 1, b = 2), data.frame (a = 1, x = 10))) 'zusammenfügen – MrFlick

Antwort

0

Wie bereits erwähnt in den Kommentaren, mit Reduce(function, x) gearbeitet, wo function die Funktion auf jedes Element der Liste auszuführen ist und x ist die Liste.

Verwandte Themen