相关疑难解决方法(0)

使用gc()命令强制垃圾收集在R中运行

我定期编程.好吧,我一直在编程,但有时会以内存错误的形式赶上我.我开始在使用rm()命令删除对象时执行一些纪律,事情变得更好.我在网上看到有关gc()在删除大型数据对象后是否应该显式调用的混合消息.有人说在R返回内存错误之前它会运行,gc()而其他人则说手动强制gc是一个好主意.

我应该gc()在删除大型对象后运行以确保最大的内存可用性吗?

garbage-collection r

64
推荐指数
6
解决办法
3万
查看次数

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

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

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

r

50
推荐指数
4
解决办法
11万
查看次数

由R session分配的清除内存(gc()没有帮助!)

我正在进行大规模的机器学习,但是由于R内存占用,我的计算速度变慢了.
我清除了我的对象,我也尝试gc()了结果:

           used  (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells  4460452 231.5   15288838 1116.6  36599071 1954.7
Vcells 29572776 349.4  324509788 2712.9 350796378 3376.4
Run Code Online (Sandbox Code Playgroud)

我的任务管理器显示R会话仍然分配超过3GB的内存,我的电脑仍然很慢.
如何释放R占用的内存?(我不想重启电脑)

memory garbage-collection r

18
推荐指数
2
解决办法
3万
查看次数

R网状,如何从内存中清除python对象?

我已经通过reticulate包使用一些python功能创建了一个函数,特别是使用PIL以下方法打开图像:

image <- "~/Desktop/image.jpg"
pil.image <- reticulate::import( "PIL.Image", convert = FALSE )
img <- pil.image$open( image )
Run Code Online (Sandbox Code Playgroud)

然后我用图像做了一些事情(我正在提取几种作物),这很好.这是我正在做的一个例子(outputs我需要的作物数据框,所以crop.grid只是4个数字的向量.

crop.grid <- c( outputs$x.start[x],
                outputs$y.start[x],
                outputs$x.stop[x],
                outputs$y.stop[x] )
crop.grid <- as.integer( crop.grid )
crop.grid <- reticulate::r_to_py( crop.grid )
output.array <- img$crop( box = crop.grid )
output.array$save( output.filename )
Run Code Online (Sandbox Code Playgroud)

在此之后,我想从内存中清除图像(我正在打开的图像非常大,因此占用大量内存).我尝试在python中关闭图像:

img$close()
Run Code Online (Sandbox Code Playgroud)

和R一样:

rm( img )
gc()
Run Code Online (Sandbox Code Playgroud)

用我知道的非常小的东西替换物体.

img <- reticulate::r_to_py( 1L )
Run Code Online (Sandbox Code Playgroud)

所有这些都运行良好,但我的RAM仍然记录为非常充分.我用我创建的每个python对象尝试它们,但唯一能有效清除RAM的是重启R会话.

我知道python我最好打开图像with,以便在流程结束时清除它,但我不确定如何使用它reticulate.


---更新类似python版本:

如果我直接在python中执行上述操作:

from …
Run Code Online (Sandbox Code Playgroud)

r python-imaging-library reticulate

9
推荐指数
1
解决办法
896
查看次数

如何在无需重启 R 会话的情况下清理 R 内存

我知道有很多类似的问题都得到了公认的答案(这里这里甚至这个),但到目前为止,我没有找到关于如何在不重新启动 R 会话的情况下释放一些内存空间的明确答案。

我知道,可以保存他的工作区,重新启动 R 并重新加载工作区,但是:

  1. 我不确定,但是这样做您必须重新加载所有库,对吗?
  2. 如果你的工作空间很大,这样做可能需要时间,如果我经常这样做,我不想每次都浪费时间。
  3. 如果我删除一个大对象,是否只是实际释放该对象占用的内存的正常行为?

情况似乎并非如此。即使在删除了我工作区的一半最大对象(感谢这个很好的答案)并运行之后gc()top仍然给我提供了完全相同的内存使用百分比。

这里的一个评论,它说:

R 的垃圾收集将 RAM 标记为可用。由您的操作系统来收回

听起来不错,但不确定这真的发生了。top即使在rm()和之后gc(),甚至在操作系统中启动新的其他进程之后,甚至在 2 小时、10 小时或 3 天之后,仍然向我显示 R 使用的相同数量的内存。

这个评论表明它必须查看加载的库和图形设备,但为什么呢?我该如何解决?

如果我rm()一个3GB对象然后gc()用来释放内存,R 怎么可能仍然使用相同百分比的内存?

memory garbage-collection r

6
推荐指数
1
解决办法
1800
查看次数