R语言高性能编程(二)

接着上一篇

一、减少内存使用的简单方法
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多核 并行计算

未完待续.....

时间: 2024-09-30 20:40:15

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

R语言高性能编程(三)

一.使用并行计算加倍提升性能1.数据并行 VS 任务并行实现数据并行的算法scoket 并行性注意并行计算时间并不与执行任务的计算资源数目成正比(计算机核心),amdahl定律:并行代码的速度受限于串行执行的部分,包括并行性带来的开销在非windows系统中,parallel支持分叉集群(交叉法),新的work进程会从父R进程分叉出来,并拷贝数据.好处是不需要显示的创建和销毁集群实现任务并行的算法 2.计算机集群并行执行多个任务只有基于socket的集群可以做到这一点,因为进程不可能被分叉到另外

机器学习算法的R语言实现(二):决策树

1.介绍 ?决策树(decision tree)是一种有监督的机器学习算法,是一个分类算法.在给定训练集的条件下,生成一个自顶而下的决策树,树的根为起点,树的叶子为样本的分类,从根到叶子的路径就是一个样本进行分类的过程. ?下图为一个决策树的例子,见http://zh.wikipedia.org/wiki/%E5%86%B3%E7%AD%96%E6%A0%91 ? 可见,决策树上的判断节点是对某一个属性进行判断,生成的路径数量为该属性可能的取值,最终到叶子节点时,就完成一个分类(或预测).决策树

机器学习算法的R语言实现(二):决策树算法

1.介绍 ?决策树(decision tree)是一种有监督的机器学习算法,是一个分类算法.在给定训练集的条件下,生成一个自顶而下的决策树,树的根为起点,树的叶子为样本的分类,从根到叶子的路径就是一个样本进行分类的过程. ?下图为一个决策树的例子,见http://zh.wikipedia.org/wiki/%E5%86%B3%E7%AD%96%E6%A0%91 ? 可见,决策树上的判断节点是对某一个属性进行判断,生成的路径数量为该属性可能的取值,最终到叶子节点时,就完成一个分类(或预测).决策树

R语言基础编程技巧汇编 - 26

1.      监视R语言包更新状态的网站 R语言包的数量已经有近万个,及时关注新发布的包,以及已发布的包的更新状态,非常重要,下列网站提供了这个功能,读者可以经常访问: http://lib.stat.cmu.edu/R/CRAN/web/packages/available_packages_by_date.html 2.      使用命令行参数的R程序示例 以Windows系统为例,按照以下步骤: 1.    把Rscript.exe的路径加入到Path环境变量中,在我的机器上设置如下:

R语言基础编程技巧汇编 - 17

1.       timestamp函数输出当前时间 timestamp() ##------ Sun Apr 05 20:54:06 2015 ------## 该函数可以输入当前的系统时间,可用于耗时很长的程序定时输出当前时间,用于判断程序是否正常运行:也可用于调试,判断哪一段代码效率较低. 2.       多个比较的boxplot图 a=c(1,2,3,4,5,2,1,2,4,2,5,6) b=c("A","A","B","B&

R语言基础编程技巧汇编 - 前言

前 言 R语言是近年来迅速崛起的用于数据分析和数据挖据的编程语言,它由一批统计学家开发,进而广泛应用于各种需要进行统计分析的行业.在大数据时代,其优雅的编码风格.包罗万象的开发包.强大的数据处理能力,吸引了来自各个领域从事数据分析相关工作的人员. R语言是强大自由的,但是其学习曲线也是陡峭的.本人具有C/C++,C#,Python等多种语言的开发经验,就本人的体会,从R语言初级开发水平进阶到中级开发水平,要比其他编程语言更加困难,往往很多初学者就在这个阶段放弃了,相当可惜.另外,对于大量没有很多

R语言基础编程技巧汇编 - 25

1.      使用rClr包访问.NET库 下载地址:http://r2clr.codeplex.com/ library(rClr) clrLoadAssembly('c:/path/to/myassembly.dll') myObj <-clrNew('MyNamespace.MyClass,MyAssemblyName') clrCall(myObj, 'SayHelloWorld') 2.      向C语言代码传递数据框参数示例 data.frame是一个list对象 #includ

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

1.help可以提供帮助,如help(nchar), help("[["),或者用?nchar也能获取帮助.example(nchar)可以获取到某个主题的使用方法. 2.nchar获取字符串的长度,nchar(x)返回x中每个字符串的长度,length获取向量的长度,区别如下: > nchar("hello") [1] 5 > nchar(3) [1] 1 > nchar(3000) [1] 4 > help(nchar) > nch

R语言基础编程技巧汇编 - 27

1.      向量循环移位 library("magic") x <- 1:10 magic::shift(x,1) # [1] 10 1  2  3 4  5  6 7  8  9 magic::shift(x,1) # [1] 10 1  2  3 4  5  6 7  8  9 magic::shift(x,2) # [1] 9 10  1  2 3  4  5 6  7  8 magic::shift(x,3) # [1] 8  9 10  1 2  3  4 5  6