[分享] 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