You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R 3.6.0预发布版data.table包内存泄漏问题求助

data.table内存泄漏问题仅在R 3.6.0预发布版中出现

我最近在测试**R 3.6.0(预发布版)**的时候,碰到了data.table的内存泄漏问题——不管是用CRAN上的稳定版还是GitHub的开发版,这个问题都存在。

复现代码

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())

仅在R 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

已确认的触发条件

经测试,以下两个条件是触发泄漏的必要条件:

  • 调用get()函数
  • 使用by参数

另外,[,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       Rcpp_0.12.16     
[6] stringi_1.1.7     codetools_0.2-15  stringr_1.3.0

想请教各位,针对这个问题有什么排查思路吗?

内容的提问来源于stack exchange,提问作者pdb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:27:43