面对的是这样一个问题,不断读入一行一行数据,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系列函数,真的可以事半功倍!

R 语言中 data table 的相关,内存高效的 增量式 data frame的更多相关文章

  1. 掌握R语言中的apply函数族(转)

    转自:http://blog.fens.me/r-apply/ 前言 刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算. 那么,这是 ...

  2. R语言中的factor

    对于初学者来说,R语言中的factor有些难以理解.如果直译factor为“因子”,使得其更加难以理解.我倾向于不要翻译,就称其为factor,然后从几个例子中理解: <span style=& ...

  3. R语言中apply函数

    前言 刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算. 那么,这是为什么呢?原因在于R的循环操作for和while,都是基于R语言 ...

  4. C语言中float,double类型,在内存中的结构(存储方式)

    C语言中float,double类型,在内存中的结构(存储方式)从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以doubl ...

  5. R语言中的MySQL操作

    R语言中,针对MySQL数据库的操作执行其实也有很多中方式.本人觉得,熟练掌握一种便可,下面主要就个人的学习使用情况,总结其中一种情况-----使用RMySQL操作数据库. 1.下载DBI和RMySQ ...

  6. R语言中的read.table()

    参考资料:http://www.cnblogs.com/xianghang123/archive/2012/06/06/2538274.html read.table(file, header = F ...

  7. R语言中Fisher判别的使用方法

    最近编写了Fisher判别的相关代码时,需要与已有软件比照结果以确定自己代码的正确性,于是找到了安装方便且免费的R.这里把R中进行Fisher判别的方法记录下来. 1. 判别分析与Fisher判别 不 ...

  8. R语言中 fitted()和predict()的区别

    fitted是拟合值,predict是预测值.模型是基于给定样本的值建立的,在这些给定样本上做预测就是拟合.在新样本上做预测就是预测. 你可以找一组数据试试,结果如何. fit<-lm(weig ...

  9. R语言中的Apriori关联规则的使用

    1.下载Matrix和arules包 install.packages(c("Matrix","arules")) 2.载入引入Matrix和arules包 # ...

随机推荐

  1. rsync应用实例

      一. 通过ssh的方式 前面介绍的rsync 5种方式当中,第二.第三(1个冒号)就属于通过ssh的方式,这种方式其实就是让用户去登录到远程机器,然后执行rsync的任务. [root@local ...

  2. android jni java类型与c语言类型互换

    1.java String转换 C str char* Jstring2CStr(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsst ...

  3. 使用Rest api管理Ceph网关

    背景 开发基于Ceph RadosGW的微服务,需要实现调用方可以通过rest api就能创建用户,获取用户信息等功能. 实现 Ceph的RadosGW自身就有该功能,这些创建用户.获取用户信息.获取 ...

  4. bzoj2117

    动态电分治+二分 肯定要枚举所有点对,那么我们建出点分树降低树高,然后每个点存下点分树中所有子树到这个点的距离,然后二分+lower_bound就行了. #include<bits/stdc++ ...

  5. Empire Strikes Back

    题意: 给定$K$个数字,求最小的正整数$n$,使得$\prod_{i=1}^{K}{a_i !} | n!$ 解法: 注意到$$\sum_{p为质数}{1/p} = O(loglogn)$$, 这样 ...

  6. Linux 软链接 硬链接 ln命令(繁杂版)

    注意:创建软连接的时候,要用绝对路径!!! 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln - ...

  7. 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历

    二叉树的先序,中序,后序如何遍历,不在此多说了.直接看题目描述吧(题目摘自九度oj剑指offer面试题6): 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结 ...

  8. MySQL备份与主备配置

    MySQL备份与主备配置 数据备份类型 全量备份:备份整个数据库 增量备份:备份自上一次备份以来(增量或完全)以来变化的数据 差异备份:备份自上一次完全备份以来变化的数据 全量备份 全量备份的方法有 ...

  9. html扩展调用qq邮箱

    总体流程:qq邮箱->设置->账户->邮我(使用邮我) over!over!over!

  10. HDU2852【树状数组+二分】

    额..有点遗忘了树状数组特性了..印象中一直是前缀和,然后一定要记住树状数组是把给出的值(值太大可能可以离散化)也就是点到了区间,然后这个点存的值就是由自己来定了. 题意: 百度. 思路: 树状数组是 ...