似乎如果 adata.table
是新加载的,则包含的函数:=
不会通过引用进行修改。
任何人都可以复制它吗?它是一个错误吗?
test<-function(data){data[,ppp:=1]}
a<-data.table(x=1:2)
save(a,file="ttt")
load("ttt")
test(a) # show ppp
a # doesn't have ppp
b<-data.table(x=1:2)
test(b) # show ppp
b # has ppp
更新
如果列指针向量中没有剩余插槽,则将执行浅拷贝,这是一种“特征”。data.table
名称绑定到新向量。它在同一范围内工作正常。但是,除非手动将返回值绑定到名称,否则外部范围无法看到此更改。
options(datatable.alloccol=4)
options(datatable.verbose=TRUE)
a<-as.data.table(matrix(1:20, ncol=4))
truelength(a) # 4
test<-function(x){print(truelength(x));x[,pp:=1];print(truelength(x));x}
test(a)
a # doesn't change