绑定数据而不复制

时间:2016-05-20 16:45:14

标签: r memory-management data-binding data.table

我正在运行一个程序,它生成几百万行的几列,然后打印它们,然后打印。我正在尝试使这个过程更有效,并且想知道以下是否复制数据,或只是点。

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可以非常有效地保存大型数据集。在这种情况下,有没有办法使用它?

1 个答案:

答案 0 :(得分:2)

这是一种将矢量放入data.table而无需复制/引用的方法(需要R 3.1.1+ iirc)。

x = 1:5
y = 5:1

dt = setDT(list(x, y))
#   V1 V2
#1:  1  5
#2:  2  4
#3:  3  3
#4:  4  2
#5:  5  1

dt[3, V1 := 10]
#   V1 V2
#1:  1  5
#2:  2  4
#3: 10  3
#4:  4  2
#5:  5  1

x
#[1]  1  2 10  4  5