微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R:删除ggplot2对象不会释放空间?可能发生内存泄漏?

如何解决R:删除ggplot2对象不会释放空间?可能发生内存泄漏?

我注意到,当尝试从用户工作空间中删除ggplot2对象时,仍然会占用大量内存!在下面的示例中,使用400MB数据集删除伪ggplot调用仍然会使用400MB。尤其是当直接从文件中读取ggplot2调用中使用的数据时,就会发生这种情况。

这是预期的行为,还是哈德利在Advanced R中谈论的内存泄漏?以及如何有效清除内存(gc()无济于事)?

请注意,这可能与Memory leakage in using `ggplot` on large binned datasets有关,但是该帖子从未收到答案。

谢谢!

pryr::mem_used()
path <- tempfile() 
if(!file.exists(path)){
  saveRDS(as.data.frame(matrix(1:1e08,ncol=5)),path)
}

## memory leak
pryr::mem_used()
#> 34.9 MB
p1 <- ggplot2::ggplot(readr::read_rds(path),ggplot2::aes(V1))
rm(p1)
invisible(gc())
pryr::mem_used()
#> 447 MB
ls()
#> [1] "path"

reprex package(v0.3.0)于2020-11-02创建

解决方法

请注意,ggplot会跟踪在程序包名称空间的缓存中创建的最后一个图。可以通过ggplot2::last_plot()进行检索,因此ggsave()之类的函数可以工作,而无需您将绘图显式传递给函数。您可以使用

将其清除
ggplot2::set_last_plot(NULL)

例如

pryr::mem_used()
p1 <- ggplot2::ggplot(readr::read_rds(path),ggplot2::aes(V1))
rm(p1)
ggplot2::set_last_plot(NULL)
invisible(gc())
pryr::mem_used()

无论何时调用ggplot()或打印ggplot对象时,都会设置高速缓存。它仅存储最新值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。