Rには値渡しのセマンティクスがあり、偶発的な副作用を最小限に抑えます(良いことです)。ただし、コードが再利用可能性/読みやすさ/保守性のために多くの関数/メソッドに編成されている場合、およびそのコードが一連の変換/操作を通じて、たとえばビッグデータフレームを介して大きなデータ構造を操作する必要がある場合、値渡しのセマンティクスが導きます周りのデータの多くのコピーと多くのヒープスラッシング(悪いこと)に。たとえば、関数パラメータとして渡されるヒープで50Mbを使用するデータフレームは、少なくとも関数呼び出しの深さと同じ回数だけコピーされ、呼び出しスタックの最下部のヒープサイズはN*になります。 50Mb。関数が呼び出しチェーンの奥深くから変換/変更されたデータフレームを返す場合、コピーは別のNだけ上に移動します。
SOの質問データフレームの受け渡しを回避するための最良の方法は何ですか?このトピックに触れますが、参照渡しの質問を直接行わないように表現されており、勝者の答えは基本的に「はい、値渡しはRの仕組みです」と述べています。それは実際には100%正確ではありません。R環境では、参照渡しのセマンティクスが可能になり、 protoなどのOOフレームワークはこの機能を広範囲に使用します。たとえば、protoオブジェクトが関数の引数として渡され、その「マジックラッパー」が値で渡される場合、R開発者にはセマンティクスが参照渡しされます。
ビッグデータフレームを参照で渡すことは一般的な問題のようで、他の人がどのようにそれにアプローチしているか、そしてこれを可能にするライブラリがあるかどうか疑問に思っています。私の検索では、私はそれを発見していません。
何も利用できない場合、私のアプローチは、データフレームをラップするプロトオブジェクトを作成することです。このオブジェクトを便利にするために追加する必要のあるシンタックスシュガーについてのポインターをいただければ幸いです。たとえば、$演算子と[[演算子、および注意が必要な落とし穴をオーバーロードします。私はRの専門家ではありません。
私のニーズはデータフレームだけですが、Rとうまく統合するタイプにとらわれない参照渡しソリューションのボーナスポイント。