R:删除 ggplot2 对象不会释放 space?可能的内存泄漏?
R: deleting ggplot2 object does not free space? Possible memory leakage?
我注意到当试图从用户工作区中删除 ggplot2
对象时,仍然使用了大量内存!?在下面的示例中,删除使用 400MB 数据集的伪 ggplot 调用仍然会使用 400MB。这似乎尤其发生在 ggplot2
调用中使用的数据直接从文件中读取时。
这是预期的行为,还是 Hadley 在 Advanced R 中谈到的内存泄漏?以及如何有效清除内存(gc()
无济于事)?
请注意,这可能与 Memory leakage in using `ggplot` on large binned datasets 有关,但 post 从未收到答复。
谢谢!
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 对象时设置。它只存储最近的值。
我注意到当试图从用户工作区中删除 ggplot2
对象时,仍然使用了大量内存!?在下面的示例中,删除使用 400MB 数据集的伪 ggplot 调用仍然会使用 400MB。这似乎尤其发生在 ggplot2
调用中使用的数据直接从文件中读取时。
这是预期的行为,还是 Hadley 在 Advanced R 中谈到的内存泄漏?以及如何有效清除内存(gc()
无济于事)?
请注意,这可能与 Memory leakage in using `ggplot` on large binned datasets 有关,但 post 从未收到答复。
谢谢!
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 对象时设置。它只存储最近的值。