如何清理R内存(无需重启我的电脑)?

Joy*_*yce 50 r

我在R(在Windows下)运行我的代码,其中涉及大量的内存数据.我试图用来rm(list=ls())清理内存,但似乎内存仍然被占用,我无法重新运行我的代码.我试图关闭R并重新启动R,但它是一样的,似乎内存仍然被占用,因为当我运行代码它说它不能分配内存(但它可能在第一次).重新启动电脑后,内存似乎只清理了.

有没有办法清理内存,以便我可以重新运行我的代码而不必每次都重新启动我的电脑?

Ala*_*lan 65

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

  • +1,但OP经历的问题是,即使在关闭R并重新启动它之后,内存仍然没有被释放.完全关闭R应该与调用`gc`一样有效. (3认同)
  • 您可以扩展一下gc的功能吗?答案是有效的,但有点短。 (2认同)
  • 我已经发布了我对清除 R 占用的内存的答案。我还想向您指出 - http://stackoverflow.com/questions/8813753/what-is-the-difference- Between-gc-and-rm (2认同)

小智 21

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

rm(list = ls())

.rs.restartR()
Run Code Online (Sandbox Code Playgroud)

  • 我猜这是 RStudio 的内部函数,不适用于“plain vanilla”R。无论如何,很高兴知道:-) (2认同)

Kum*_*hav 8

使用ls()函数查看R对象占用的空间.使用rm("objectName")清除R内存中不再需要的对象.看到这个.


小智 6

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
Run Code Online (Sandbox Code Playgroud)

用保罗的例子,

m = matrix(runif(10e7), 10000, 1000)
Run Code Online (Sandbox Code Playgroud)

现在

memory.size(max=F)
[1] 1024.18
Run Code Online (Sandbox Code Playgroud)

清理记忆

gc()
memory.size(max=F)
[1] 184.86
Run Code Online (Sandbox Code Playgroud)

换句话说,现在应该再次清除记忆。如果循环代码,最好gc()在循环的最后一行添加 a ,以便在开始下一次迭代之前清除内存。