我有以下情况:
1)一些数据表的列表
2)为了测试目的,我故意想要(深度)复制整个包括数据表在内的列表
3)我想从复制的列表中取出一些元素并添加一个新列。
以下是代码:
现在我遇到了以下错误:
我不是很清楚R如何处理复制调用并将其传递给data.table,但难道不是这样吗:(?)
如果有人明确使用复制函数,那么他/她应该意识到“按值”和“按引用”的区别。因此,应该向他/她提供对象的真实副本。
因此,我认为不应该出现任何错误,并且我认为出现错误是一个“错误”。这个观点正确吗?
FW
1)一些数据表的列表
2)为了测试目的,我故意想要(深度)复制整个包括数据表在内的列表
3)我想从复制的列表中取出一些元素并添加一个新列。
以下是代码:
library(data.table)
x = data.table(aaa = c(1,2))
y = data.table(bbb = c(1,2))
z = list(x,y)
zz = copy(z)
v = zz[[1]]
v = v[, newColumn := 1]
现在我遇到了以下错误:
Error in `[.data.table`(res, , `:=`(xxx, TRUE)) :
(converted from warning) Invalid .internal.selfref detected and fixed
by taking a copy of the whole table so that := can add this new column
by reference. At an earlier point, this data.table has been copied by R
(or been created manually using structure() or similar). Avoid key<-,
names<- and attr<- which in R currently (and oddly) may copy the whole
data.table. Use set* syntax instead to avoid copying: ?set, ?setnames
and ?setattr. Also, in R<=v3.0.2, list(DT1,DT2) copied the entire DT1
and DT2 (R's list() used to copy named objects); please upgrade to
R>v3.0.2 if that is biting. If this message doesn't help, please report
to datatable-help so the root cause can be fixed.
我不是很清楚R如何处理复制调用并将其传递给data.table,但难道不是这样吗:(?)
如果有人明确使用复制函数,那么他/她应该意识到“按值”和“按引用”的区别。因此,应该向他/她提供对象的真实副本。
因此,我认为不应该出现任何错误,并且我认为出现错误是一个“错误”。这个观点正确吗?
FW
R
和data.table
? - Simon O'Hanlon