美文网首页R_Advance
[笔记]why is data.frame so slow

[笔记]why is data.frame so slow

作者: 柳叶刀刀 | 来源:发表于2019-05-09 14:58 被阅读0次
do.call(rbind, ) 换成 dplyr::bind_rows( ) 竟然提速千倍,R让人如此无语。
R 内存管理

https://www.cnblogs.com/cloudtj/articles/5478281.html
cite:
“如果使用的是RStudio,refs始终都是2,那是因为环境浏览器也会指向各个对象。refs()函数只是一个判断,它仅仅可以区分1和多于1的引用数量,也就是说下面的例子refs始终会返回2.”
“非R的原函数访问R的对象,都会使得该对象的引用次数增加,而原函数则不会。一般而言,如果一个R对象的被引用次数为1,那么R的原函数都不会发生拷贝,在原先的地址空间对数据进行更改。这样的原函数一般包括[[<-, [<-, @<-, $<-, attr<-, attributes<-, class<-, dim<-, dimnames<-, names<-, and levels<-。如果想需求其他的方式防止拷贝的次数过多,那么RCpp包是个不错的选择”
非R的原函数访问R的对象,都会使得该对象的引用次数增加,而原函数则不会,这是为什么呢
https://stackoverflow.com/questions/23898969/is-data-really-copied-four-times-in-rs-replacement-functions

R data.frame 惨案 以及 data.table 不加索引惨案

https://www.douban.com/note/698241469/

for循环并不慢,慢的是data.frame

https://www.zhihu.com/question/33901694?sort=created
http://blog.sina.com.cn/s/blog_4d2fda500102wjay.html
cite:
“那么为什么data.frame类型的x每次修改都被从新copy到了内存的新地方,而list类型定y就没有?这是因为list在R里面属于primitive函数(是用c实现,但是可以被R直接调用,而不必通过.internal接口,可以通过is.primitive()判断一个函数是不是primitive函数),而data.frame不是primitive函数。在R里面primitive函数每次读取一个对象的时候,就会copy这个对象”(应该是非primitive函数?)

data frame不适合大数据

https://www.cnblogs.com/foreverycc/p/4731629.html
cite: “data frame真的不适合大数据!”

pre-allocate data structures

https://stackoverflow.com/questions/14693956/how-can-i-prevent-rbind-from-geting-really-slow-as-dataframe-grows-larger

the R inerno.pdf 走进R的地狱吧

https://www.burns-stat.com/pages/Tutor/R_inferno.pdf

the R internal

https://cran.r-project.org/doc/manuals/r-release/R-ints.pdf

modify a data.frame in-place (destructively) 原地修改data.frame

https://stackoverflow.com/questions/17891519/is-it-possible-to-modify-a-data-frame-in-place-destructively/17891970?r=SearchResults#17891970

merge by postion / merge by name

https://stackoverflow.com/questions/15673550/why-is-rbindlist-better-than-rbind/15673654?r=SearchResults#15673654
hadley 说保留行名是不明智的
大数据的do.call(rbind, )真是慢到无以复加

综上:目前看不懂,先放着吧。

相关文章

网友评论

    本文标题:[笔记]why is data.frame so slow

    本文链接:https://www.haomeiwen.com/subject/yckwoqtx.html