R: Übergeben eines Datenrahmens als Referenz

R hat eine Pass-by-Value-Semantik, die zufällige Nebenwirkungen minimiert (eine gute Sache). Wenn Code jedoch in viele Funktionen / Methoden zur Wiederverwendbarkeit / Lesbarkeit / Wartbarkeit unterteilt ist und dieser Code große Datenstrukturen durch z. B. große Datenrahmen durch eine Reihe von Transformationen / Operationen manipulieren muss, führt die Semantik des Vorübergehens von Werten zu viel Kopieren von Daten herum und viel Heap Thrashing (eine schlechte Sache). Beispielsweise wird ein Datenrahmen, der 50 MB auf dem als Funktionsparameter übergebenen Heapspeicher belegt, mindestens so oft kopiert, wie die Tiefe des Funktionsaufrufs und die Größe des Heapspeichers am unteren Rand des Aufrufstapels N * betragen. 50 MB. Wenn die Funktionen einen transformierten / modifizierten Datenrahmen aus der Tiefe der Aufrufkette zurückgeben, wird der Kopiervorgang von einem anderen N fortgesetzt.

Die SO-FrageWas ist der beste Weg, um die Weitergabe eines Datenrahmens zu vermeiden? berührt dieses Thema, ist aber so formuliert, dass es vermieden wird, die Frage nach dem Referenzwert direkt zu stellen, und die Gewinnerantwort sagt im Grunde: "Ja, der Wert nach dem Referenzwert ist die Funktionsweise von R". Das ist eigentlich nicht 100% genau. R-Umgebungen ermöglichen die Semantik des Pass-by-Reference und OO-Frameworks wie zproto Verwenden Sie diese Funktion ausgiebig. Wenn beispielsweise ein Proto-Objekt als Funktionsargument übergeben wird, während sein "Magic Wrapper" als Wert an den R-Entwickler übergeben wird, wird die Semantik als Referenz übergeben.

Es scheint, dass die Weitergabe eines großen Datenrahmens als Referenz ein häufiges Problem ist, und ich frage mich, wie andere darauf zugegriffen haben und ob es Bibliotheken gibt, die dies ermöglichen. Bei meiner Suche habe ich keine entdeckt.

Wenn nichts verfügbar ist, würde mein Ansatz darin bestehen, ein Proto-Objekt zu erstellen, das einen Datenrahmen umschließt. Ich würde mich über Hinweise über den syntaktischen Zucker freuen, der diesem Objekt hinzugefügt werden sollte, um es nützlich zu machen, z. B. Überladen der Operatoren $ und [[sowie aller Fallstricke, auf die ich achten sollte. Ich bin kein R-Experte.

Bonuspunkte für eine typunabhängige Pass-by-Reference-Lösung, die sich gut in R einfügt, obwohl ich ausschließlich Datenrahmen benötige.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage