我希望您能以一种内存高效的方式将多个数据表进行行绑定。更准确地说,我希望能够逐个绑定它们,并在此过程中释放内存,以便在我的内存只有大小为(n+1)*k时,可以连接大小为k的n个数据表。
我编写了以下函数以实现此目的:
我编写了以下函数以实现此目的:
rbindlistOneByOne <- function(l, use.names=FALSE, fill=FALSE, idcol=NULL, verbose = F) {
ll <- length(l)
# Handle empty lists
if(ll <= 0) stop("rbindlistOneByOne : empty list")
if(ll <= 1) return(l[[1]])
# Handle normal lists (ll > 2)
current <- l[[1]]
res <- current
l[1] <- NULL
rm(current); gc()
for(i in 2:ll) {
current <- l[[1]]
res <- rbindlist(list(res, current), use.names = use.names, fill = fill, idcol = idcol)
l[1] <- NULL
rm(current); gc()
}
return(res)
}
现在的问题是,即使我认为这个函数应该是内存高效的,但事实上并不是。
你知道为什么吗?是因为rm命令不会释放内存,导致被称为“current”的data.table仍然占用着内存。
data.table
内置的rbindlist()
函数会发生什么? - Uwegc()
不释放内存。在 R 中,内存分配是确定性的,但内存释放是随机的。在 R 中无法实现你想要做的事情。最好的方式是使用rbindlist
,它是最节省内存的方法。 - JRR