R data.table内存地址问题

时间:2015-10-28 19:03:52

标签: r data.table

我在R中有一个data.table。我们称之为x。我把它插入一个列表如下:

pars <- list(x = x)

由于我没有复制,我希望sapply(list(x, pars$x), tracemem)给出的内存地址是相同的。他们是 (!)。

当我将xpars$x保存到save_much.RData文件中然后重新加载load(file = "save_much.RData")时,会出现(潜在)问题。当我获得sapply(list(x, pars$x), tracemem)给出的内存地址时重新加载时,我得到不同的内存地址。因此,当我没有明确希望这种情况发生时,已经制作了深层复制品。

总结请尝试以下操作,您将看到问题:

x <- data.table(rnorm(100, 0, 1))
pars <- list(x = x)
sapply(list(x, pars$x), tracemem)
save("x", "pars", file = "save_much.RData")
rm("x", "pars")
gc()
load(file = "save_much.RData")
sapply(list(x, pars$x), tracemem)

这对我来说是一个问题,因为我编写了一个引用类,其中xpars是属性。我的期望是,因为xpars$x指向同一个对象,所以在重新加载此引用类的特定实例时,我不应该获得不同的内存地址。

有没有人在使用data.table之前遇到过这个问题?如果这已经作为一个问题发布了,我很抱歉:第一次来SO!

这是我在R-3.2.2和data.table版本1.9.6上运行代码时看到的:

library(data.table)
data.table 1.9.6  For help type ?data.table or https://github.com/Rdatatable/data.table/wiki
The fastest way to learn (by data.table authors): https://www.datacamp.com/courses/data-analysis-the-data-table-way
x <- data.table(rnorm(100, 0, 1))
pars <- list(x = x)
sapply(list(x, pars$x), tracemem)
[1] "<0000000005EFB9B8>" "<0000000005EFB9B8>"
save("x", "pars", file = "save_much.RData")
rm("x", "pars")
gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 268518 14.4     460000 24.6   350000 18.7
Vcells 480006  3.7    1023718  7.9   786276  6.0
load(file = "save_much.RData")
sapply(list(x, pars$x), tracemem)
[1] "<0000000005F06618>" "<0000000005F06A68>"

0 个答案:

没有答案