R语言内存的管理

2019-07-31 14:46:53 浏览数 (1)

R语言中内存是我们平时不怎么注意的一个方面,但是R语言的内存占有率还是很高的。尤其是在对大型数据的处理过程中,每当你复制你的变量或者创建新的变量都会占用新的内存空间。当然Windows系统中R语言会自动去调节自身的内存占用与释放。然而,当大量数据在调用批处理函数的时候内存的自动管理显得很是无力。R中的对象在内存中存于两种不同的地方,一种是堆内存(heap),其基本单元是“Vcells”,每个大小为8字节,新来一个对象就会申请一块空间,把值全部存在这里,和C里面的堆内存很像。第二种是地址对(cons cells),和LISP里的cons cells道理一样,主要用来存储地址信息,最小单元一般在32位系统中是28字节、64位系统中是56字节。

下面我们介绍R语言中内存管理的函数以及相对应的包:

函数:

1. memory.size() 当前工作空间内存的占有情况。

2. rm( object ) 删除占内存的变量

3. gc() 清空缓存空间,防止在rm() 后未释放的空间。

4. ls() 列出当前工作空间的所有变量。

5. object.size(object) 查看变量所占的内存

6. memory.limit()查看系统规定的内存使用上限。如果你认为现在的内存上限不够用,可以通过memory.limit(newLimit)更改到一个新的上限。

R包:

1. R包pryr。主要对内存管理,更加方便监控内存。其中的函数:

a. mem_used() 等同于memory.size().但是会带有单位

b. mem_change(命令) 查看执行命令时,内存的变化。

c. object_size(object) 进行了单位的换算

d. storage.mode(x) 查看x的存储模式

2. R包lineprof。它会告诉你哪一行的代码消耗了多少时间、内存,释放多少内存,复制了多少向量.不过目前只支持Linux下的版本

代码案例:

library(lineprof)

prof <- lineprof(sum(c(1:23000760)))

0 人点赞