在lapply上运行一项长期任务会增加已用内存吗?

时间:2015-12-10 12:34:48

标签: r

我打算在数据帧列表上执行排列测试,但我担心在某些时候会耗尽内存。假设我有以下玩具示例:

f <- function(x) {
  some_intermediate_value <- mean(x)
  to_be_returned_value <- some_intermediate_value^2
  return(to_be_returned_value)
}

out <- lapply(list_of_objects, f)

假设list_of_objects很长。 R会运行更长时间,R会使用越来越多的内存吗?换句话说,函数f不断创建变量(some_intermediate_valueto_be_returned_value)这一事实会使内存在某些时候耗尽,或者R的内存管理是否会照顾到此?

1 个答案:

答案 0 :(得分:2)

查看@ hadley的pryr包,我相信它显示内存使用量将保持不变,

# install.packages('pryr')
library(pryr)

f <- function(x) {
  some_intermediate_value <- mean(x)
  to_be_returned_value <- some_intermediate_value^2
  print(pryr::mem_used())
  return(to_be_returned_value)
}

out <- lapply(
  # large list ~ 669MB
  list(x1 = rnorm(1e7),
       x2 = rnorm(1e7),
       x3 = rnorm(1e7),
       x4 = rnorm(1e7)),
  FUN = f)

669 MB
669 MB
669 MB
669 MB

http://adv-r.had.co.nz/memory.html