我在R中运行代码(在Windows下),涉及大量内存数据,我尝试使用rm(list=ls())清理内存,但似乎内存仍被占用,无法重新运行代码,我尝试关闭R并重新启动R,但还是一样,似乎内存仍被占用,如运行代码时,它说它不能分配内存(但它可以在第一次)。内存似乎只有得到清理后,我重新启动我的电脑。有没有什么方法可以清理内存,这样我就可以重新运行我的代码,而不必每次重新启动我的电脑?
rm(list=ls())
tyg4sfes1#
也许你可以尝试使用gc()函数。gc()的调用会导致垃圾收集的发生。在一个大对象被移除后调用gc()会很有用,因为这可能会提示R将内存返回给操作系统。gc()还会返回占用内存的摘要。
gc()
ddhy6vgd2#
我遇到了同样的问题与R。我挖了一点,并与解决方案,我们需要重新启动R会话,以完全清理内存/RAM。为此,您可以使用一个简单的代码后,从您的工作区删除一切。代码如下:
rm(list = ls()) .rs.restartR()
k2arahey3#
使用ls()函数查看哪些R对象占用了空间。使用rm(“objectName”)从R内存中清除不再需要的对象。参见this。
ls()
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()作为循环的最后一行,这样内存在开始下一次迭代之前就被清空了。
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会话,创建一个大的随机数矩阵:
创建矩阵时,使用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中创建这个大型数据集之前和之后可用内存的变化情况。
6gpjuf906#
只是添加这个作为参考,以防任何人需要重新启动并立即运行命令。我使用这种方法只是为了从系统中清除RAM。确保你已经删除了所有不再需要的对象。也许gc()也可以帮助你。但是没有什么比重新启动R会话更能清除RAM了。
library(rstudioapi) restartSession(command = "print('x')")
n7taea2i7#
rm()和gc()的作用有限,正如Gavin Simpson所建议的,即使您释放了R中的实际内存,Windows通常也不会回收它,直到您关闭R或需要它,因为所有表面上的Windows内存都已填满。这通常不是问题。但是,如果你运行大循环,这有时会导致内存碎片长期,这样即使你释放内存并重新启动R -内存碎片可能会阻止你分配大块内存。特别是如果其他应用程序分配碎片内存,而你正在运行R。rm()和gc()可能会延迟不可避免的,但更多的RAM更好。
zu0ti5jz8#
我发现进入我的“tmp”文件夹并删除所有挂起的rsession文件是很有用的,这通常会释放任何看起来被“卡住”的内存。
8条答案
按热度按时间tyg4sfes1#
也许你可以尝试使用
gc()
函数。gc()
的调用会导致垃圾收集的发生。在一个大对象被移除后调用gc()
会很有用,因为这可能会提示R将内存返回给操作系统。gc()
还会返回占用内存的摘要。ddhy6vgd2#
我遇到了同样的问题与R。我挖了一点,并与解决方案,我们需要重新启动R会话,以完全清理内存/RAM。为此,您可以使用一个简单的代码后,从您的工作区删除一切。代码如下:
k2arahey3#
使用
ls()
函数查看哪些R对象占用了空间。使用rm(“objectName”)从R内存中清除不再需要的对象。参见this。63lcw9qa4#
以保罗为例,
现在
为了清除记忆
换句话说,现在内存应该再次被清空了,如果你循环一个代码,最好添加一个
gc()
作为循环的最后一行,这样内存在开始下一次迭代之前就被清空了。qlzsbp2j5#
Linux(Fedora 16)下的一个示例显示当R关闭时内存被释放:
使用了2854兆字节。接下来我打开一个R会话,创建一个大的随机数矩阵:
创建矩阵时,使用3714 MB:
关闭R会话后,我很好地恢复了使用的内存(2856 MB空闲):
当然,您使用的是Windows,但是您可以在Windows中重复这个练习,并报告在R中创建这个大型数据集之前和之后可用内存的变化情况。
6gpjuf906#
只是添加这个作为参考,以防任何人需要重新启动并立即运行命令。
我使用这种方法只是为了从系统中清除RAM。确保你已经删除了所有不再需要的对象。也许
gc()
也可以帮助你。但是没有什么比重新启动R会话更能清除RAM了。n7taea2i7#
rm()和gc()的作用有限,正如Gavin Simpson所建议的,即使您释放了R中的实际内存,Windows通常也不会回收它,直到您关闭R或需要它,因为所有表面上的Windows内存都已填满。
这通常不是问题。但是,如果你运行大循环,这有时会导致内存碎片长期,这样即使你释放内存并重新启动R -内存碎片可能会阻止你分配大块内存。特别是如果其他应用程序分配碎片内存,而你正在运行R。rm()和gc()可能会延迟不可避免的,但更多的RAM更好。
zu0ti5jz8#
我发现进入我的“tmp”文件夹并删除所有挂起的rsession文件是很有用的,这通常会释放任何看起来被“卡住”的内存。