运行用于创建和写入文件的进程后,R不会释放所有内存:
library(readr)
library(tidyverse)
N=100000000
memsize_1_start <- memory.size()
garbage <- tibble(a=runif(N), b=runif(N))
memsize_2_before_write <- memory.size()
readr::write_delim(garbage, "test.dat",col_names = FALSE)
memsize_3_after_write <- memory.size()
rm(garbage)
memsize_4_after_rm <- memory.size()
print(paste0("At start: " , memsize_1_start))
print(paste0("Before write: ", memsize_2_before_write))
print(paste0("After write ", memsize_3_after_write))
print(paste0("After rm ", memsize_4_after_rm))
产量: [1]“开始时:84.07”
[1]“写前:1602.51”
[1]“写入后1628.55”
[1]“在rm 1628.57之后”
在rm()之后,Rstudio的环境窗格中没有列出任何对象。我的实际用例涉及在10到20年的循环中读取较大的(30GB)文件。一年读取输入文件会导致保留的内存比此处显示的还要多,并且由于处于循环中,因此每次迭代后我都无法重新启动。
如何在不重新启动的情况下恢复此内存?
答案 0 :(得分:0)
您可以在循环中尝试gc()
,这将在每次迭代后清除一些内存。