美文网首页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