接着上一篇

一、减少内存使用的简单方法
1、重用对象而不多占用内存 y <- x 是指新变量y指向包含X的那个内存块,只有当y被修改时才会复制到新的内存块,
一般来说只要向量没有被其他对象引用,就可以正常修改,以避免复制向量带来的CPU和RAM开销。按照程序属于来说,R是按值传递,
应该避免使用sort 类似的函数,会返回一个副本,资源开销至少和原对象一样大,甚至更大
2、删除不在需要的中间数据
注意 在调用rm()的时候,内存不会被立即释放并交还到操作系统,而是在必要的时候,或者当已删除对象的内存量超过阈值的时候,
由R的垃圾回收器自动释放内存
3、运行时计算值而不是永久性存储值
4、交换活跃数据和非活跃数据 将一些数据保存到磁盘,saveRDSP readRDS

二、使用有限内存处理大型数据集
1、使用节约内存的数据结构
R存储数据结构的方式? 对所有数据类型来说,向量是最基本的结构单元,提供了多种原子向量类型(logic,integer,numeric,complex,character,raw)
很多其他数据结构都可以从这些向量类型构建,R内部存储结构的本质就是向量
2、稀疏矩阵 包含大量的零值或者空值 sparse参数
3、对称矩阵 dspmatrix
4、比特向量 R中的逻辑值占4个字节或32个比特位,而比特向量仅用一个比特位存储每个逻辑值。减少32倍,但是不适合存储NA值(bit包)
5、使用内存映射文件并以块的形式处理数据 数据不管怎么优化 大到放不进内存中的时候 就需要以memory -mapped file 的形式存储到磁盘
分块计算 ,然后合并结构,是否容易实现 取决于算法本身
bigmemory big.matrix 支持很多R矩阵上的操作 支持big.matrix对象的cran包 biganalytics  bigtabulate
ff 和 ffbase 已做过简单的数据测试 本机16G 内存 I7700的U  可支持2亿数据量的 分块计算 是一个很考验算法的难题

--------------------截止到这里 我们已经学习了串行R代码的各种优化,下面介绍利用CPU多核 并行计算

未完待续.....

R语言高性能编程(二)的更多相关文章

  1. R语言高性能编程,优化(一)

    这段时间学习了<R高性能编程>这本书,基于这段时间做的项目实践,总结了一些自己的体会,和大家分享 一.为什么R程序有时候会很慢?1.计算性能的三个限制条件 cpu ram io R代码本身 ...

  2. R语言高性能编程(三)

    一.使用并行计算加倍提升性能1.数据并行 VS 任务并行实现数据并行的算法scoket 并行性注意并行计算时间并不与执行任务的计算资源数目成正比(计算机核心),amdahl定律:并行代码的速度受限于串 ...

  3. R语言语法基础二

    R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...

  4. R语言︱情感分析—基于监督算法R语言实现(二)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:本文大多内容来自未出版的<数据 ...

  5. R语言实战(二)数据管理

    本文对应<R语言实战>第4章:基本数据管理:第5章:高级数据管理 创建新变量 #建议采用transform()函数 mydata <- transform(mydata, sumx ...

  6. R语言入门(二)基础语法

    1.help可以提供帮助,如help(nchar), help("[["),或者用?nchar也能获取帮助.example(nchar)可以获取到某个主题的使用方法. 2.ncha ...

  7. R 语言学习(二)—— 向量

    1. 入门 将摄氏度转化为华氏度 >> 27*1.8+32 [1] 80.6 [1]:表示数字的向量索引号,在 R 语言中任何一个数字都看作一个向量. 向量化 >> temp ...

  8. R语言面向对象编程:S3和R6

    一.基于S3的面向对象编程 基于S3的面向对象编程是一种基于泛型函数(generic function)的实现方式. 1.S3函数的创建 S3对象组成:generic(generic FUN)+met ...

  9. R语言实战(二)——数据分析基础知识

    一.R中数据结构 1.数据集 通常是由数据构成的一个矩形数组,行 表示 观测(记录.示例),列 表示 变量(字段.属性) 2.R中的数据结构 3.向量 c()可以用来创建向量 > a <- ...

随机推荐

  1. Redis Windows版安装详解

    一.下载Redis Redis下载有两个途径一是官网.二是Github,由于Redis官方只支持Linux系统,所以官网是没有Windows版本的,不过微软开源团队维护了一份所以我们可以使用这个. 官 ...

  2. EXISTS/NOT EXISTS CASE WHEN等使用方法

    --简单判断用法 WHERE EXISTS (SELECT * FROM cpay..System_Setting) --可以替换count ) FROM cpay..System_Setting U ...

  3. Angular - 预加载 Angular 模块

    Angular - 预加载延迟模块 在使用路由延迟加载中,我们介绍了如何使用模块来拆分应用,在访问到这个模块的时候, Angular 加载这个模块.但这需要一点时间.在用户第一次点击的时候,会有一点延 ...

  4. Ubuntu16.04 install mysql5.X

    打开终端: Ctrl+Alt+T 安装ubuntu自带的mysql-server: sudo apt-get install mysql-server 输出Y按回车如下图: 默认安装为root用户,所 ...

  5. Ubuntu 14.04 安装 Sublime Text 3

    1. 实验环境 Ubuntu 14.04 + Sublime text 3 2. sublime text介绍 ublime Text 是一款流行的文本编辑器软件,有点类似于TextMate,跨平台, ...

  6. wpf 画刷的分类

    System.Windows.Media.Brush最上一层画刷 System.Windows.Media.GradientBrush  线性画刷 ,下层主要有两种画刷 System.Windows. ...

  7. asp.net mvc CodeFirst模式数据库迁移步骤

    利用Code First模式构建好基本的类后,项目也开始搭建完毕并成功运行,而且已经将数据库表结构自动生成了. 但是,我有新的类要加入,有字段需要修改,那怎么办呢,删库,跑路 ?  哈哈 利用数据库迁 ...

  8. 实验:实现https

    实现https 环境 1.三台主机分别为A,B,C. 2.A主机设置为CA和DNS服务器,ip为192.168.213.129 3.B主机为client,ip为192.168.213.253 4.C主 ...

  9. 将 C# 枚举反序列化为 JSON 字符串 基础理论

    该转换过程需要引用 Newtonsoft.JSON,这其中的转换过程还是蛮有意思的. 一.定义枚举 /// <summary> /// 托寄物品枚举 /// </summary> ...

  10. vDSP加速的应用

    vDSP 是IOS提供一系列加速处理算法..在优化时可以考虑应用一二... 1.在项目中加入Accelerate.framework库 点开项目属性->Build Phases->Link ...