Рассмотрим эту переменную
a = data.frame(x=1:5,y=2:6)
Когда я использую функцию замены для изменения первого элемента a
, сколько раз
память с таким же размером a
скопирована?
tracemem(a)
"change_first_element<-" = function(x, value) {
x[1,1] = value
return(x)
}
change_first_element(a) = 3
# tracemem[0x7f86028f12d8 -> 0x7f86028f1498]:
# tracemem[0x7f86028f1498 -> 0x7f86028f1508]: change_first_element<-
# tracemem[0x7f86028f1508 -> 0x7f8605762678]: [<-.data.frame [<- change_first_element<-
# tracemem[0x7f8605762678 -> 0x7f8605762720]: [<-.data.frame [<- change_first_element<-
Существует четыре операции копирования. Я знаю, что R не мутирует объекты или не проходит по ссылке (да, есть исключения), но почему есть четыре копии? Должна ли быть недостаточно одной копии?
Часть 2:
Если я вызываю функцию замены по-разному, есть только три операции копирования?
tracemem(a)
a = `change_first_element<-`(a,3)
# tracemem[0x7f8611f1d9f0 -> 0x7f8607327640]: change_first_element<-
# tracemem[0x7f8607327640 -> 0x7f8607327758]: [<-.data.frame [<- change_first_element<-
# tracemem[0x7f8607327758 -> 0x7f8607327800]: [<-.data.frame [<- change_first_element<-