我正在运行一个程序,它生成几百万行的几列,然后打印它们,然后打印。我正在尝试使这个过程更有效,并且想知道以下是否复制数据,或只是点。
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可以非常有效地保存大型数据集。在这种情况下,有没有办法使用它?
答案 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