楼主:
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] 在我电脑上跑,速度也是天差地远...
这实在太雷了,以前并未注意,不知道各位还有没有踩过什么效能"雷"?^^