• R 语言中 data table 的相关,内存高效的 增量式 data frame


    面对的是这样一个问题,不断读入一行一行数据,append到data frame上,如果用dataframe,  rbind() ,可以发现数据大的时候效率明显变低。

    原因是 每次bind 都是一次重新整个数据集的重新拷贝

    这个链接有人测试了各种方案,似乎给出了最优方案

    http://stackoverflow.com/questions/11486369/growing-a-data-frame-in-a-memory-efficient-manner

    library(data.table)
    dt <- data.table(x=rep(0,1000), y=rep(0,1000))
    tracemem(dt)
    for(i in 1:1000) {
      dt[i,x := runif(1)]
      dt[i,y := rnorm(1)]
    }

    data table 可以说是必备的r package。

    这也是我尝试多种方案后最终采用的办法。

    这里有介绍data.table 的具体用法

    http://cran.r-project.org/web/packages/data.table/data.table.pdf

    有个问题,赋值一行 难道用一定要用 dt[x, 1:100 := list(xx)] 这样?

    注意RHS 等号右侧一定要是一个List,不能是vector

    另外几个R 的技巧:

    • 时常运行下gc(), 回收内存(这就是为啥你workspace 没有object但内存仍然居高不下的原因)
    • 部分大的object,可以单独save(),需要的时候Load,不要最后存在image 里
    • r中的hash package 很好用
    • 并行我用的是 parallel包,简单易用
    • system.time(
      {
        x <- 1:wb2.userNum
        cl <- makeCluster(4, outfile='sim.log')
        clusterExport(cl, c("set_similarity","printf","wb2.follow2.set", "wb2.userNum"))
        results <- parLapply(cl, x, para_func_sim)
        print("results ok")
        wb2.follow.sim <- do.call('rbind', results)
        stopCluster(cl)
      })

      最后,多利用data table 的statistical 和apply系列函数,真的可以事半功倍!

  • 相关阅读:
    window7访问虚拟机ubuntu中的mysql
    photo sphere viewer使用图像数据替代路径来生成全景图
    pgmagick,pil不保存图片并且获取图片二进制数据记录
    flask_admin model官方文档学习
    python pip更换下载源(转)
    flask admin学习记录
    mongodb权限管理(转)
    vmware三种网络连接模式区别
    使用VLC推送TS流(纯图版)
    【转】RTMP/RTP/RTSP/RTCP协议对比与区别介绍
  • 原文地址:https://www.cnblogs.com/Sorean/p/4157398.html
Copyright © 2020-2023  润新知