R: passando um quadro de dados por referência

R tem semântica de passagem por valor, o que minimiza os efeitos colaterais acidentais (uma coisa boa). No entanto, quando o código é organizado em muitas funções / métodos para reusabilidade / legibilidade / manutenção e quando esse código precisa manipular grandes estruturas de dados através de, por exemplo, big data frames, através de uma série de transformações / operações, a semântica passa-pelo-valor leva a muita cópia de dados em volta e muita pilha debulhando (uma coisa má). Por exemplo, um quadro de dados com 50 Mb no heap transmitido como um parâmetro de função será copiado no mínimo o mesmo número de vezes que a profundidade da chamada da função e o tamanho do heap na parte inferior da pilha de chamadas será N * 50Mb Se as funções retornarem um quadro de dados transformados / modificados do fundo da cadeia de chamadas, a cópia será aumentada por outro N.

A pergunta SOQual é a melhor maneira de evitar a passagem de um quadro de dados? toca neste tópico, mas é formulado de uma maneira que evita diretamente a pergunta de passagem por referência e a resposta vencedora basicamente diz: "sim, o valor por passagem é como o R funciona". Isso não é realmente 100% exato. Ambientes R permitem semântica de passagem por referência e estruturas OO, comoproto use esse recurso extensivamente. Por exemplo, quando um objeto proto é passado como um argumento de função, enquanto seu "invólucro mágico" é passado por valor, para o desenvolvedor R, a semântica é passada por referência.

Parece que passar um quadro de big data por referência seria um problema comum e eu estou querendo saber como os outros o abordaram e se há alguma biblioteca que permita isso. Na minha busca eu não descobri um.

Se nada estiver disponível, minha abordagem seria criar um objeto proto que contenha um quadro de dados. Eu apreciaria os ponteiros sobre o açúcar sintático que deveria ser adicionado a este objeto para torná-lo útil, por exemplo, sobrecarregando os $ e [[operadores, bem como quaisquer dicas que eu deveria procurar. Eu não sou um especialista em R.

Pontos de bônus para uma solução de passagem por referência independente de tipo que se integra muito bem com R, embora minhas necessidades sejam exclusivamente com quadros de dados.

questionAnswers(1)

yourAnswerToTheQuestion