R: Передача фрейма данных по ссылке

У R есть семантика передачи по значению, которая минимизирует случайные побочные эффекты (хорошо). Однако, когда код организован во множество функций / методов для повторного использования / удобочитаемости / обслуживания, и когда этому коду необходимо манипулировать большими структурами данных, например, с помощью больших фреймов данных, через серию преобразований / операций, семантика передачи по значению приводит к большому количеству копирования данных и большому количеству кучи (плохая вещь). Например, кадр данных, занимающий 50 МБ в куче, которая передается в качестве параметра функции, будет скопирован как минимум столько же раз, сколько и глубина вызова функции, а размер кучи в нижней части стека вызовов будет равен N * 50Mb. Если функции возвращают преобразованный / измененный фрейм данных из глубины цепочки вызовов, то копирование идет вверх на другой N.

ТАК вопросКаков наилучший способ избежать передачи кадра данных? затрагивает эту тему, но формулируется таким образом, чтобы избежать прямого вопроса о переходе по ссылке, и победивший ответ в основном говорит: «Да, передача по значению - это то, как работает R». Это не совсем точно. Среды R поддерживают семантику передачи по ссылке и структуры OO, такие какпрото широко использовать эту возможность. Например, когда объект-прототип передается в качестве аргумента функции, тогда как его «волшебная обертка» передается по значению, разработчику R семантика передается по ссылке.

Кажется, что передача большого фрейма данных по ссылке была бы распространенной проблемой, и мне интересно, как другие подошли к нему и есть ли библиотеки, которые позволяют это делать. В моих поисках я не обнаружил ни одного.

Если ничего не доступно, мой подход заключается в создании прототипа, который оборачивает фрейм данных. Я был бы признателен за указатели на синтаксический сахар, который должен быть добавлен к этому объекту, чтобы сделать его полезным, например, перегружая операторы $ и [[, а также любые ошибки, на которые я должен обратить внимание. Я не эксперт по R.

Бонусные баллы за независимое от типа решение для передачи по ссылке, которое прекрасно интегрируется с R, хотя мои потребности связаны исключительно с фреймами данных.

Ответы на вопрос(1)

Ваш ответ на вопрос