R, глубокие и мелкие копии, проходят по ссылке
Я хотел бы понять логику, которую использует R при передаче аргументов функциям, создании копий переменных и т. д. что касается использования памяти. Когда он фактически создает копию переменной, а не просто передает ссылку на эту переменную? В частности, меня интересуют следующие ситуации:
f <- function(x) {x+1}
a <- 1
f(a)
Передается ли a
буквально или это ссылка на передаваемое?
x <- 1
y <- x
Ссылка на копию? Когда же это не так?
Если бы кто-нибудь мог объясните мне это, я был бы очень признателен.
1 ответ:
Когда он передает переменные, он всегда копируется, а не по ссылке. Иногда, однако, вы не получите копию, сделанную до тех пор, пока назначение не произойдет на самом деле. Реальное описание процесса-это обещание пройти мимо. Взгляните на документацию
Один практический вывод состоит в том, что очень трудно, если не невозможно, избежать необходимости по крайней мере в два раза больше оперативной памяти, чем ваши объекты номинально занимают. Изменение большого объекта обычно требует создания временного копировать. Обновление: 2015: я согласен (и согласился) с Мэттом Доулом, что его данные.пакет таблицы предоставляет альтернативный маршрут к назначению, который позволяет избежать проблемы копирования-дублирования. Если это было запрошенное обновление, то я не понял его в то время, когда было сделано предложение.?force ?delayedAssign
Недавно в R 3.2.1 были внесены изменения в правила оценки для
apply
иReduce
. Это было так-объявлено со ссылкой на новости здесь: возвращение анонимных функций из lapply-что происходит неправильно?И интересная статья, цитируемая джетцелем в комментариях, теперь здесь :