在 R 中清除内存
在使用 R 脚本一段时间后,R 环境可能会存留大量的内存数据,从而占用计算机的大量资源。这种情况最终可能会导致 R 系统因为无法再分配内存而拒绝运行代码。即使重启 R 环境,也可能发生内存没有被释放出来的情况。
命令 rm(list=ls())
预计会释放所有对象使用的内存,但它真正做的是销毁使用的内存块的指针。问题是这些内存块并没有立即释放出来供新任务使用。
在 R 中使用 gc
函数清除内存
垃圾回收过程会在 R 中自动定期运行,但有时当你需要大量内存来进行一些大数据操作时,垃圾回收过程并没有在准确的时刻运行。在这种情况下,调用 gc()
函数来清除 R 中的内存可能会很有用。
gc()
的主要目的是显示一份关于内存使用情况的报告。副作用是,调用 gc()
会触发垃圾回收过程,清除内存。因此,正如 gc
文档所指出的那样,在删除一个大对象后调用 gc()
是个好主意,因为这个操作会提示 R 释放它不再使用的内存。
你也可以在一个循环中插入对 gc()
的调用来重复运行垃圾回收过程。只是要考虑到这个过程每次调用都需要一些时间,大约是 100ms,所以不建议把它放在一个高度重复的循环或者迭代次数多的循环中。
如果使用的是 Windows,可以调用 memory.size()
函数,用 max=T
参数来显示操作系统可访问的内存量,或者用 max=F
来显示任何时刻使用的内存量。R 文档解释了 memory.size()
函数的其他方面。
为了显示创建和销毁大数据对象时的内存消耗是如何变化的,我们可以在 Windows 中运行以下代码,创建一个具有 100,000 个元素的样本向量,删除向量,最后执行垃圾回收。在每条指令之间,我们可以通过执行 memory.size
函数,并使用 max=F
参数来检查使用了多少内存。
memory.size (max = F)
输出:
[1] 32.6
这 32.6MB 代表了 R 使用的最小内存量。
my_data <- sample (1:100000)
memory.size (max = F)
输出:
[1] 33.75
我们可以看到,由于 memory.size
函数报告的使用内存增加了 1,所以创建的样本数据大约消耗了 1 MB 的内存。
rm (my_data)
memory.size (max = F)
输出:
[1] 33.75
尽管我们删除了对象,但内存似乎仍然被占用。
gc()
输出:
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 315785 16.9 617200 33.0 617200 33.0
Vcells 633077 4.9 25730861 196.4 110503932 843.1
memory.size (max = F)
输出:
[1] 32.6
每台电脑的内存量都不一样,但你可以看到,在运行 rm (my_data)
指令后,memory.size
报告的空闲内存量保持不变,只有在执行 gc()
指令后,它才返回到 32.6 MB 的初始值,内存被有效释放。
相关文章
R 中具有多个条件的函数向量化
发布时间:2023/03/21 浏览次数:64 分类:编程语言
-
一项常见的数据分析任务是根据同一行的其他列使用一个或多个条件创建或更新数据框列。 如果我们尝试使用 if 语句来执行此操作,则只会使用第一行来测试条件,并且会根据该行更
在 R 中读取 xlsx 文件
发布时间:2023/03/21 浏览次数:66 分类:编程语言
-
在这篇文章中,你将会了解到两个在 R 中读取 xlsx 文件的最完整和最容易使用的库:readxl 和 openxlsx。