面对的是这样一个问题,不断读入一行一行数据,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(,), y=rep(,))
tracemem(dt)
for(i in :) {
dt[i,x := runif()]
dt[i,y := rnorm()]
}

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 <- :wb2.userNum
    cl <- makeCluster(, 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系列函数,真的可以事半功倍!

最新文章

  1. ie11浏览器和chrome浏览器对于bgsound和background的一些区别
  2. 在RHEL6p5中设置网卡
  3. HT for Web列表和3D拓扑组件的拖拽应用
  4. 服务器如何处理http请求
  5. javascript数组浅谈2
  6. Facebook技术架构
  7. 第三百二十六天 how can I 坚持
  8. Android开发中Handler的经典总结--转载至网络
  9. Cygwin Unable to get setup from *
  10. Openresty使用Thrift安装步骤
  11. (一〇八)iPad开发之横竖屏适配
  12. HTML+css基础认识
  13. drawable内存管理
  14. 自己动手在win2003系统中添加虚拟网卡
  15. cordova(安卓)(腾讯信鸽注册绑定与反绑定) 插件开发
  16. 2018.11.02 NOIP模拟 飞越行星带(最小生成树/二分+并查集)
  17. Scapy:局域网MAC地址扫描脚本
  18. 【Quartz】Quartz将Job保存在数据库中所需表的说明
  19. FR共轭梯度法 matlab
  20. 基于ASP.NET Core 创建 Web API

热门文章

  1. easyui tree 树形节点 formatter 渲染不起作用
  2. Linux-打包和文件系统
  3. python 基础之第四天
  4. C++之引用&amp;的详解
  5. bzoj 4711 小奇挖矿 ——“承诺”类树形dp
  6. MTK DDR调试
  7. HDU2159(完全背包)
  8. Redis GEO 特性在 LBS 中的应用总结
  9. bzoj4430
  10. ubuntu12.04下安装搜狗拼音