分配给相同的名称(例如循环)是否会释放R中以前使用的内存?

时间:2019-06-21 17:25:48

标签: r

如果a <- iris是否a <- 1; gc()释放以前使用的内存(即用于将虹膜存储为a的内存)?

我怀疑它可能不会(至少不是很完美)的原因是因为我正在15,000个迭代循环中使用相同的对象名称。尽管每次迭代结束时都调用gc(),但每次迭代后都会逐渐增加ram使用率。

我不明白为什么会这样

如果有用的话,这里是循环

for (i in starting_index:finishing_index) {
  pdf_path <- paste0("../pdfs/", packages[i], ".pdf")
  manual_pdf <- pdf_text(pdf_path)
  one_manual_pdf <- manual_pdf %>% unlist %>% paste0(., collapse="")
  temp <- one_manual_pdf %>% str_split("topics:")
  length_temp <- temp[[1]] %>% length
  relevant_temp <- temp[[1]] %>% .[(2):(length_temp)] %>% unlist %>% paste0(., collapse="")

  relevant_temp <- relevant_temp %>% 
    strsplit(., "\nstr                                                                      ",
             fixed = TRUE) %>%
    .[[1]] %>% .[1]

  relevant_temp <- relevant_temp %>% str_remove(., "(\\d+)$")

  fns <- relevant_temp %>% strsplit(. , " ") %>% unlist %>% {.[!grepl("\n", .)] } %>% 
    { .[!(nchar(.) == 1 | nchar(.) == 0)] } %>% gsub("\n", "", .) %>% gsub("\r", "", .)

  pgs <- rep(packages[i], length(fns))

  data_for_one <- data.frame(pgs, fns, stringsAsFactors = FALSE)

  if(!dir.exists("../output")) { shell("cd .. && mkdir output") }

  filename <- paste0("../output/", arguments[1], "pfd.csv")
  write.table(data_for_one, filename, append=TRUE, sep=",", 
              row.names=FALSE, col.names=!file.exists(filename))

  gc()

}

2 个答案:

答案 0 :(得分:2)

有趣的是,在这种情况下,memory leak that affected the pdftools R library源自poppler,它是R的label = ttk.Label(self, text="Test-1") label .grid(row=1, stick="w", padx=20) 库的c ++依赖项

答案 1 :(得分:1)

您不需要自己运行Private Sub CommandButton1_Click() If Ties.OpPlan.Value = True Then clearties ElseIf Ties.Prior.Value = True Then TieToPrevious ElseIf Ties.Custom.Value = True Then CustomTie ElseIf Ties.NetCase.Value = True Then NetCaseTie Else output = MsgBox("You need to pick a case to tie to", vbOKOnly) End If Me.Hide End Sub 。 R在需要空间时会自动运行垃圾回收。

gc()

您想要返回捕获环境的对象(例如公式)时可能会出现内存问题,因为内存将以这种方式保持分配状态。

library(pryr)

a <- iris
object_size(a)
> object_size(a)
7.2 kB


a <- 1
object_size(a)
> object_size(a)
56 B

我看不到您的功能有问题。