如何在不重新启动电脑的情况下清理R内存?

ev7lccsx  于 2022-12-30  发布在  其他
关注(0)|答案(8)|浏览(363)

我在R中运行代码(在Windows下),涉及大量内存数据,我尝试使用rm(list=ls())清理内存,但似乎内存仍被占用,无法重新运行代码,我尝试关闭R并重新启动R,但还是一样,似乎内存仍被占用,如运行代码时,它说它不能分配内存(但它可以在第一次)。内存似乎只有得到清理后,我重新启动我的电脑。
有没有什么方法可以清理内存,这样我就可以重新运行我的代码,而不必每次重新启动我的电脑?

tyg4sfes

tyg4sfes1#

也许你可以尝试使用gc()函数。gc()的调用会导致垃圾收集的发生。在一个大对象被移除后调用gc()会很有用,因为这可能会提示R将内存返回给操作系统。gc()还会返回占用内存的摘要。

ddhy6vgd

ddhy6vgd2#

我遇到了同样的问题与R。我挖了一点,并与解决方案,我们需要重新启动R会话,以完全清理内存/RAM。为此,您可以使用一个简单的代码后,从您的工作区删除一切。代码如下:

rm(list = ls())

.rs.restartR()
k2arahey

k2arahey3#

使用ls()函数查看哪些R对象占用了空间。使用rm(“objectName”)从R内存中清除不再需要的对象。参见this

63lcw9qa

63lcw9qa4#

memory.size(max=T) # gives the amount of memory obtained by the OS
[1] 1800
memory.size(max=F) # gives the amount of memory being used
[1] 261.17

以保罗为例,

m = matrix(runif(10e7), 10000, 1000)

现在

memory.size(max=F)
[1] 1024.18

为了清除记忆

gc()
memory.size(max=F)
[1] 184.86

换句话说,现在内存应该再次被清空了,如果你循环一个代码,最好添加一个gc()作为循环的最后一行,这样内存在开始下一次迭代之前就被清空了。

qlzsbp2j

qlzsbp2j5#

Linux(Fedora 16)下的一个示例显示当R关闭时内存被释放:

$ free -m                                                                                                                                                                                                                                    
             total       used       free     shared    buffers     cached                                                                                                                                                                    
Mem:          3829       2854        974          0        344       1440                                                                                                                                                                    
-/+ buffers/cache:       1069       2759                                                                                                                                                                                                     
Swap:         4095         85       4010

使用了2854兆字节。接下来我打开一个R会话,创建一个大的随机数矩阵:

m = matrix(runif(10e7), 10000, 1000)

创建矩阵时,使用3714 MB:

$ free -m                                                                                                                                                                                                                                    
             total       used       free     shared    buffers     cached                                                                                                                                                                    
Mem:          3829       3714        115          0        344       1442                                                                                                                                                                    
-/+ buffers/cache:       1927       1902                                                                                                                                                                                                     
Swap:         4095         85       4010

关闭R会话后,我很好地恢复了使用的内存(2856 MB空闲):

$ free -m                                                                                                                                                                                                                                    
             total       used       free     shared    buffers     cached                                                                                                                                                                    
Mem:          3829       2856        972          0        344       1442                                                                                                                                                                    
-/+ buffers/cache:       1069       2759                                                                                                                                                                                                     
Swap:         4095         85       4010

当然,您使用的是Windows,但是您可以在Windows中重复这个练习,并报告在R中创建这个大型数据集之前和之后可用内存的变化情况。

6gpjuf90

6gpjuf906#

只是添加这个作为参考,以防任何人需要重新启动并立即运行命令。
我使用这种方法只是为了从系统中清除RAM。确保你已经删除了所有不再需要的对象。也许gc()也可以帮助你。但是没有什么比重新启动R会话更能清除RAM了。

library(rstudioapi)
restartSession(command = "print('x')")
n7taea2i

n7taea2i7#

rm()和gc()的作用有限,正如Gavin Simpson所建议的,即使您释放了R中的实际内存,Windows通常也不会回收它,直到您关闭R或需要它,因为所有表面上的Windows内存都已填满。
这通常不是问题。但是,如果你运行大循环,这有时会导致内存碎片长期,这样即使你释放内存并重新启动R -内存碎片可能会阻止你分配大块内存。特别是如果其他应用程序分配碎片内存,而你正在运行R。rm()和gc()可能会延迟不可避免的,但更多的RAM更好。

zu0ti5jz

zu0ti5jz8#

我发现进入我的“tmp”文件夹并删除所有挂起的rsession文件是很有用的,这通常会释放任何看起来被“卡住”的内存。

相关问题