Я думаю, что метод @ Dason - единственный способ сделать это теоретически, но практически я думаю, что способ R. уже делает это.
Например, когда вы делаете следующее:
y <- c(1,2)
x <- y
x
на самом деле просто указатель на значение c(1,2)
.Точно так же, когда вы делаете
abc <- function(x) {x <- 5; x}
g <- abc(g)
Это не значит, что вы тратите время на копирование g
в функцию и затем копирование результата обратно в g
.Я думаю, что R делает с кодом
g <- abc(g)
:
- Сначала рассматривается правая сторона.Для функции
abc
настроена среда. - В этой среде создается указатель с именем
x
. x
, указывающий на то же значение, на которое указывает g
. - Затем
x
указывает на 5 - Функция возвращает указатель
x
g
теперь указывает на то же значение, на которое x
указываетвремя возврата.
Таким образом, , а не , что существует целая куча ненужного копирования больших опций.
Я надеюсь, что кто-то может подтвердить/ исправить это.