如何解决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 举报,一经查实,本站将立刻删除。