gpt4 book ai didi

r - 如何在不增加内存消耗的情况下绑定(bind)data.table?

转载 作者:行者123 更新时间:2023-12-01 08:53:25 25 4
gpt4 key购买 nike

我有几个巨大的数据表dt_1, dt_2, ..., dt_N与相同的列。我想将它们绑定(bind)成一个 datatable .如果我使用

dt <- rbind(dt_1, dt_2, ..., dt_N)

或者
dt <- rbindlist(list(dt_1, dt_2, ..., dt_N))

那么内存使用量大约是 dt_1,dt_2,...,dt_N 所需数量的两倍.有没有办法在不显着增加内存消耗的情况下绑定(bind)它们?请注意,我不需要 dt_1, dt_2, ..., dt_N一旦它们结合在一起。

最佳答案

其他方法,使用临时文件“绑定(bind)”:

nobs=10000
d1 <- d2 <- d3 <- data.table(a=rnorm(nobs),b=rnorm(nobs))
ll<-c('d1','d2','d3')
tmp<-tempfile()

# Write all, writing header only for the first one
for(i in seq_along(ll)) {
write.table(get(ll[i]),tmp,append=(i!=1),row.names=FALSE,col.names=(i==1))
}

# 'Cleanup' the original objects from memory (should be done by the gc if needed when loading the file
rm(list=ll)

# Read the file in the new object
dt<-fread(tmp)

# Remove the file
unlink(tmp)

明显比 rbind慢方法,但是如果您有内存争用,这不会比要求系统换出内存页面慢。

当然,如果您的原始对象首先是从文件加载的,那么在加载到 R 之前,最好使用另一个最适合处理文件的工具(cat、awk 等)连接文件。

关于r - 如何在不增加内存消耗的情况下绑定(bind)data.table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34761693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com