作者cywhale (cywhale)
看板R_Language
标题[分享] nrow, references and copies
时间Tue Dec 12 09:57:59 2017
还蛮让我惊讶的,原来不能乱加 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] 在我电脑上跑,速度也是天差地远...
这实在太雷了,以前并未注意,不知道各位还有没有踩过什麽效能"雷"?^^
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.65.48
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1513043882.A.69C.html
1F:推 andrew43: 感谢分享。 12/12 14:01
2F:推 F0011010101: 谢谢分享 12/12 19:49