R: Pasando un cuadro de datos por referencia

R tiene una semántica de paso por valor, que minimiza los efectos secundarios accidentales (algo bueno). Sin embargo, cuando el código está organizado en muchas funciones / métodos de reutilización / legibilidad / mantenibilidad y cuando ese código necesita manipular grandes estructuras de datos a través de, por ejemplo, marcos de datos grandes, a través de una serie de transformaciones / operaciones, la semántica de paso por valor conduce a una gran cantidad de copias de datos alrededor y muchas sacudidas de pila (algo malo). Por ejemplo, un marco de datos que toma 50 Mb en el montón que se pasa como parámetro de función se copiará al menos la misma cantidad de veces que la profundidad de la llamada de la función y el tamaño del montón en la parte inferior de la pila de llamadas será N * 50Mb. Si las funciones devuelven un marco de datos transformado / modificado desde lo más profundo de la cadena de llamadas, la copia aumenta en otra N.

La pregunta de SO¿Cuál es la mejor manera de evitar pasar un marco de datos? toca este tema, pero está redactado de manera que evite hacer directamente la pregunta de paso por referencia y la respuesta ganadora básicamente dice: "sí, el paso por valor es cómo funciona R". Eso no es realmente 100% exacto. Los entornos R permiten semánticas paso a paso y marcos OO, comoproto Utilice esta capacidad ampliamente. Por ejemplo, cuando un objeto proto se pasa como un argumento de función, mientras que su "envoltorio mágico" se pasa por valor, al desarrollador de R la semántica es paso por referencia.

Parece que pasar un marco de big data por referencia sería un problema común y me pregunto cómo lo han abordado otros y si hay bibliotecas que lo permitan. En mi búsqueda no he descubierto uno.

Si no hay nada disponible, mi enfoque sería crear un objeto proto que envuelva un marco de datos. Apreciaría los indicadores sobre el azúcar sintáctico que debería agregarse a este objeto para que sea útil, por ejemplo, sobrecargar los operadores $ y [[, así como cualquier error que deba tener en cuenta ”. No soy un experto en R

Puntos de bonificación para una solución de paso por referencia de tipo agnóstico que se integra muy bien con R, aunque mis necesidades son exclusivamente con marcos de datos.

Respuestas a la pregunta(1)

Su respuesta a la pregunta