R 3.6.0中的data.table包中是否存在内存泄漏?

时间:2018-05-11 19:12:00

标签: r memory-leaks data.table

<3.6>在R 3.6.0(预发行版)中仅我在data.table包中有内存泄漏。这种情况发生在CRAN版本以及GH版本上。

require(data.table)
n <- 2e6
df <- data.frame(a=rnorm(n),
                 b=factor(rbinom(n,5,prob=0.5),1:5,letters[1:5]),
                 c=factor(rbinom(n,5,prob=0.5),1:5,letters[1:5]))
dt <- setDT(df)
print(pryr::mem_used())
fff <- function(aref) {
  ff <- lapply(1:5, function(i) {
    dt2 <- dt[,list(sumA=sum(get(aref))),by=b][,c:=letters[i]]
    dt2
  })
  return(rbindlist(ff))
}
for(i in 1:10) {
  f <- fff("a")
  rm("f")
  gc()
  print(pryr::mem_used())
}
gc()
print(pryr::mem_used())

返回(仅限3.6.0

81.2 MB
81.2 MB
81.2 MB
184 MB
287 MB
390 MB
493 MB
596 MB
699 MB
802 MB

任何想法?

致电&#34; get&#34; &#34; by&#34;似乎是必要的。 `[,c:= letters [i]]不是,但它会使内存泄漏显得更快。

我的会话信息

> sessionInfo()
R Under development (unstable) (2018-05-10 r74708)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.11.3

loaded via a namespace (and not attached):
[1] compiler_3.6.0   pryr_0.1.4       magrittr_1.5     tools_3.6.0     
[5] Rcpp_0.12.16     stringi_1.1.7    codetools_0.2-15 stringr_1.3.0   

1 个答案:

答案 0 :(得分:11)

耶!一个可重复的例子。我们在这个领域已经挣扎了几个星期。您的示例看起来非常有用。请加入我们的GitHub。

目前的里程碑(下一个版本)是1.11.4,那里有几个相关的问题。是什么让你觉得我们不想让你提出问题?我想是issue template的子弹点3。我希望,现在我已经把这些要点改为更清楚了。你是一个软件包开发人员,目前尚未发布R 3.6.0以及最近发布的data.table,因此应该在GitHub上。

enter image description here