当我将所有的data.frame转换为data.table后,使用
警告信息: 在
下面也会生成相同的警告:
一个一个打很繁琐,但有效。
:=
时会收到一个警告:library(data.table) #Win R-3.5.1 x64 data.table_1.12.2
df1 <- data.frame(A=1, B=2)
df2 <- data.frame(D=3)
lapply(mget(ls()), function(x) {
if (is.data.frame(x)) {
setDT(x)
}
})
df1[, rn:=.I]
警告信息: 在
[.data.table
(df1, , :=
(rn, .I))中检测到无效的.internal.selfref并通过对数据表进行(浅层)复制来修复,以便:=可以通过引用添加此新列。 在早期的某个时刻,这个数据表已经被R复制(或者是使用structure()或类似方法手动创建的)。 避免使用names<-和attr<-,因为它们在R中当前(奇怪地)可能会复制整个数据表。 使用set*语法来避免复制:?set、?setnames和?setattr。 如果这个消息没有帮助,请将您的用例报告给data.table问题跟踪器,以便修复根本原因或改进此消息。下面也会生成相同的警告:
df3 <- data.frame(E=3)
df4 <- data.frame(FF=4)
for (l in list(df3, df4)) setDT(l)
df3[, rn:=.I]
一个一个打很繁琐,但有效。
df5 <- data.frame(G=5)
setDT(df5)
df[, rn := .I] #no warning
如何习惯性地将所有的data.frame转换为data.table?
相关:
else x
可能会很昂贵(不确定)?@chinsoon12 听起来不错,没问题。顺便说一句,我不会从@中看到你的消息 - 我只是在看到你编辑我的帖子后浏览到这里的。 - Frank