【发布时间】:2016-05-20 16:45:13
【问题描述】:
我正在运行一个程序,它生成几列数百万行,cbinds,然后打印。我正在尝试使该过程更有效地使用内存,并且想知道以下是复制数据还是仅复制点。
x<-rnorm(3,1,1)
y<-rnorm(3,2,2)
z<-rnorm(3,3,3)
M<-cbind(x,y,z)
其中一个答案Understanding exactly when a data.table is a reference to (vs a copy of) another data.table 暗示没有复制数据,但命令 .Internal(inspect(M)) 似乎不同意。
一个简单的内存解决方案是在运行 fi 之前声明 M 并将值声明为 M。我听说 data.tables 可以非常有效地保存大型数据集。在这种情况下有什么方法可以使用吗?
【问题讨论】:
-
请做一个可重现的例子。
-
你在使用 data.tables 吗?还是这些标准的 R 向量?矩阵?数据帧?如果您提供某种可用于测试的reproducible example,将会有所帮助。
-
对于它的价值,如果 x 和 y 是 data.tables
x = data.table(a = 1); y = data.table(b = 2); m = setDT(c(x,y))尝试sapply(x, address); sapply(y, address); sapply(m, address),你会看到列共享地址。我很确定它也适用于 data.frames。 -
我的理解是任何类型的联接、合并或绑定都涉及复制。唯一没有的操作是
:=和set函数系列。 -
我想到的术语是来自 Andrie 的一个问题stackoverflow.com/q/15759117的“修改时复制”@
标签: r memory-management data-binding data.table