還蠻讓我驚訝的,原來不能亂加 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] 在我電腦上跑,速度也是天差地遠...
這實在太雷了,以前並未注意,不知道各位還有沒有踩過什麼效能"雷"?^^