R语言︱大数据集下运行内存管理
在实操时出现以下的问题:
Error: cannot allocate vector of size 2.9GB
大神指导(http://bbs.pinggu.org/thread-3682816-1-1.html)
cannot allocate vector就是典型的数据太大读不了
方法有三
一、升级硬件
二、改进算法
三、修改操作系统分配给R的内存上限, memory.size(T)查看已分配内存
memory.size(F)查看已使用内存
memory.limit()查看内存上限
object.size()看每个变量占多大内存。
memory.size()查看现在的work space的内存使用
memory.limit()查看系统规定的内存使用上限。如果现在的内存上限不够用,可以通过memory.limit(newLimit)更改到一个新的上限。注意,在32位的R中,封顶上限为4G,无法在一个程序上使用超过4G (数位上限)。这种时候,可以考虑使用64位的版本。
——————————————————————————————
下面来看一个处理大数据,内存的管理办法。
《R语言处理大数据》
参考:http://blog.sina.com.cn/s/blog_61f013b80100xxir.html
R最大的缺点就是不能进行并行计算和内存限制。
一、内存限制的突破
<- 进行赋值;使用format(object.size(a), units = 'auto')查看对象占用的内存空间(此处有疑问,即在R中每个integer到底占用了多大的空间?)。
1. 建立big.memory对象
= NULL, descriptorfile = NULL, shared = TRUE)
backingpath = NULL, descriptorfile = NULL)
= "char"是指ASCII码字母。
or describe(big.matrix))函数用于将一个descriptorfile赋值给一个big.matrix。这个函数很好用,因为每次在创建一个filebacked.big.matrix后,保存R并退出后,先前创建的矩阵会消失,需要再attach.big.matrix以下
2. 对big.matrix的列的特定元素进行条件筛选
3.bigmemory中其他函数
, flush(将filebacked的文件刷新到硬盘备份上)是filebacked的big.matrix的操作。
= NULL, shared=TRUE)
二、并行计算限制的突破:
foreach package的使用
'remove', 'pass'), .packages=NULL, .export=NULL, .noexport=NULL, .verbose=FALSE)
# foreach的循环次数可以指定多个变量,但是只用其中最少?的
> foreach(a = 1:10, b = rep(10, 3)) %do% (a*b)
[[1]]
[1] 10
[[2]]
[1] 20
[[3]]
[1] 30
# foreach中.combine的“+”或者“*”是cbind之后的操作;这也就是说"expression"返回一个向量,会对向量+或者*
> foreach(i = 1:4, .combine = "+") %do% 2
[1] 8
> foreach(i = 1:4, .combine = "rbind") %do% rep(2, 5)
[,1] [,2] [,3] [,4] [,5]
result.1 2 2 2 2 2
result.2 2 2 2 2 2
result.3 2 2 2 2 2
result.4 2 2 2 2 2
> foreach(i = 1:4, .combine = "+") %do% rep(2, 5)
[1] 8 8 8 8 8
> foreach(i = 1:4, .combine = "*") %do% rep(2, 5)
[1] 16 16 16 16 16
iterators package的使用
> a
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> i2 <- iter(a, by = "row", chunksize=3)
> nextElem(i2)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
> nextElem(i2) #第二次iterate之后,只剩下1行,全部返回
[,1] [,2] [,3] [,4] [,5]
[1,] 4 8 12 16 20
> i2 <- iter(a, by = "column", checkFunc=function(x) sum(x) > 50)
> nextElem(i2)
[,1]
[1,] 13
[2,] 14
[3,] 15
[4,] 16
> nextElem(i2)
[,1]
[1,] 17
[2,] 18
[3,] 19
[4,] 20
> nextElem(i2)
错误: StopIteration
> colSums(a)
[1] 10 26 42 58 74
> testFun <- function(x){return(x+2)}
> i2 <- iter(function()testFun(1))
> nextElem(i2)
[1] 3
> nextElem(i2)
[1] 3
> nextElem(i2)
[1] 3
> i2 <- iter(testFun(1))
> nextElem(i2)
[1] 3
> nextElem(i2)
错误: StopIteration
> i2 <- iter(testFun(1))
> i3 <- iter(i2)
> nextElem(i3)
[1] 3
> nextElem(i2)
错误: StopIteration
iterators package中包括
count);irnbinom(..., count);irpois(..., count)中内部生成iterator的工具,分别表示从normal,uniform,binomial,negativity binomial和Poisson分布中随机选取N个元素,进行count次。其中,negative
binomial分布:其概率积累函数(probability mass function)为掷骰子,每次骰子为3点的概率为p,在第r+k次恰好出现r次的概率。
vn,变化速率从左向右依次递增。
> i2 <- icountn(c(3.4, 1.2)) > nextElem(i2) [1] 1 1 > nextElem(i2) [1] 2 1 > nextElem(i2) [1] 3 1 > nextElem(i2) [1] 4 1 > nextElem(i2) [1] 1 2 > nextElem(i2) [1] 2 2 > nextElem(i2) [1] 3 2 > nextElem(i2) [1] 4 2 > nextElem(i2) 错误: StopIteration
R语言︱大数据集下运行内存管理的更多相关文章
- R处理大数据集
R会把所有的对象读存入虚拟内存中.对我们大多数用户来说,这种设计可以提高与R相互的速度,但是当分析大数据集时,这种设计会降低程序运行速度有时还会产生跟内存相关的错误. 内存限制主要取决于R的build ...
- R语言重要数据集分析研究——需要整理分析阐明理念
1.R语言重要数据集分析研究需要整理分析阐明理念? 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候如何下手分析,数据分析的第一步,探索性数据分析. 统计量,即统计学里面关注的数据集的几个指标 ...
- R语言重要数据集分析研究——R语言数据集的字段含义
R语言数据集的字段含义 作者:马文敏 选择一种数据结构来储存数据 将数据输入或导入到这个数据结构中 数据集的概念 数据集通常是有数据结构的一个矩形数组,行表示规则,列表示变量. 不同的行业对数据集的行 ...
- R语言重要数据集分析研究—— 数据集本身的分析技巧
数据集本身的分析技巧 作者:王立敏 文章来源:网络 1.数据集 数据集,又称为资料集.数据集合或资料集合,是一种由数据所组成的集合. Data set(或dat ...
- 理解R语言gdistance包下的transition函数
library(raster)library(gdistance)r <- raster(nrows=3, ncols=4, xmn=0, xmx=7, ymn=0, ymx=6, crs=&q ...
- R语言iris数据集的层次聚类
data=iris[,-5]dist.e=dist(data,method='euclidean')model1=hclust(dist.e,method='ward') #分3类result=cut ...
- R语言实现数据集某一列的频数统计——with和table
with(priority.train, table(From.EMail)) 统计priority.train中From.EMail的频数
- R语言重要数据集分析研究——搞清数据的由来
搞清数据的由来 作者:李雪丽 资料来源:百度百科
- R语言之内存管理
转载于:http://blog.csdn.net/hubifeng/article/details/41113789 在处理大型数据过程中,R语言的内存管理就显得十分重要,以下介绍几种常用的处理方法. ...
随机推荐
- C++ explicit关键字详解(转载)
转载:https://www.cnblogs.com/ymy124/p/3632634.html 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函 ...
- JavaScript语言学习中的注意事项
javascript: 基于浏览器 基于对象 事件驱动 脚本语言 由: javascript: ECMAscript(ES) DOM文档对象模型 BOM浏览器对象模型,三部分组成 使用js的三种方式 ...
- LeetCode - 690. Employee Importance
You are given a data structure of employee information, which includes the employee's unique id, his ...
- Hexo博客框架
https://hexo.io/docs/#What-is-Hexo hexo博客应用1 hexo博客应用2 Spark Streaming 消费kafka到HDFS 搭建篇-使用Github-hex ...
- iOS 开发之 Xcode installation failed invalid argument!
1.运行模拟器的时候 报出:installation failed invalid argument! 原因分析:我把Bundle indentifier 置为空了! http://stackover ...
- MySQL复制同一个服务器的表结构和表数据
例如,现在服务器上有数据库 dbx 和 dby,dbx中有很多表,要把dbx中的表全部复制到dby,如下操作: 首先: use dby; [复制表结构] CREATE TABLE user LIKE ...
- 使用scp从远程服务器下载文件到本地
[下载远程文件到本地] scp -P 6008 root@192.168.1.123:/usr/data/1.zip /Users/abc/www [上传本地文件到远程] scp -P 6008 ...
- 请小心使用 ng-repeat 中的 $index
自己自学的时候,遇到$index不知道它是如何使用的,所以上网搜了一下,发现了这个关于使用$index可能会出现的一个小BUG,和大家分享一下 PS:我是小白,欢迎指正,非常感谢! 以下是全文: &q ...
- WinForm中使用DDE技术(含源码)
提起DDE技术,相信很多人不知道是啥东东,尤其是90后的程序员们.不过,有时候这个东西还是有用处的,用一句话可以总结:实现Winform程序间的通信.比如:两个Winform程序A和B需要实现通信,用 ...
- 知识点干货--讲一讲final、finally、finalize的区别
"横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中." 这首诗来自于宋朝苏轼<题西林壁>,它的意思是,庐山从正面看,它是一道道连绵起伏的山岭:从侧面看,它 ...