Предупреждение: «Обнаружен неверный .internal.selfref» при добавлении столбца в таблицу data.table, возвращенную функцией
Это выглядит какfread
ошибка, но я не уверен.
Этот пример воспроизводит мою проблему. У меня есть функция, где я читаю data.table и возвращаю его в списке. Я использую список для группировки других результатов в той же структуре. Вот мой код:
ff.fread <- function(){
dt = fread("x
1
2
")
list(dt=dt)
}
DT.f <- ff.fread()$dt
Теперь, когда я пытаюсь добавить новый столбец в DT.f, он работает, но я получаю предупреждение:
DT.f[,y:=1:2]
Warning message:
In `[.data.table`(DT.f, , `:=`(y, 1:2)) :
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.1.0, list(DT1,DT2) copied
the entire DT1 and DT2 (R's list() used to copy named objects); please upgrade
to R>=v3.1.0 if that is biting. If this message doesn't help, please report to
datatable-help so the root cause can be fixed.
Обратите внимание, что если я создаю data.table вручную, у меня нет этого предупреждения. Это прекрасно работает, например:
ff <- function(){
list(dt=data.table(x=1:2))
}
DT <- ff()$dt
DT[,y:=1:2]
Или если я не верну результатfread
в списке, это также работает нормально
ff.fread <- function(){
dt = fread("x
1
2
")
dt
}