[分享] nrow, references and copies

作者: cywhale (cywhale)   2017-12-12 09:57:59
還蠻讓我驚訝的,原來不能亂加 nrow(x),要也得寫dim(x)[1]... XD
[關鍵字]:
R speed
[出處]:
https://goo.gl/EhqsYZ
[重點摘要]:
如果我沒會錯意,意思大概是
R 在決定是否在記憶體中複製一份物件,是依靠指向該物件的reference count是否增加
若增加,下一次的賦值便會執行copy後再賦值
nrow(x) 雖然底層是呼叫dim 但因為是function 所以reference to x 會增加
直接呼叫dim 是 R primitive 則不會...
如果呼叫nrow 下一步改變x中的值則會執行一次copy...
照範例code執行 並用tracemem, pryr::refs()看的確如此...
(若有誤解,請指正,謝謝!)
原文中範例使用nrow(), dim()[1] 在我電腦上跑,速度也是天差地遠...
這實在太雷了,以前並未注意,不知道各位還有沒有踩過什麼效能"雷"?^^
作者: andrew43 (討厭有好心推文後刪文者)   2017-12-12 14:01:00
感謝分享。
作者: F0011010101 (法客)   2017-12-12 19:49:00
謝謝分享

Links booklink

Contact Us: admin [ a t ] ucptt.com