У меня есть таблица данных, которую я хочу разбить на две части. Я делаю это следующим образом:
dt <- data.table(a=c(1,2,3,3),b=c(1,1,2,2))
sdt <- split(dt,dt$b==2)
но если я хочу сделать что-то вроде этого следующим шагом
sdt[[1]][,c:=.N,by=a]
Появляется следующее предупреждающее сообщение.
Предупреждающее сообщение: В
[.data.table
(sdt [[1]],:=
(c,.N), by = a): Недопустимый .internal.selfref обнаружен и исправлен, взяв копию целую таблицу, так что: = может добавить этот новый столбец по ссылке. Загар более ранняя точка, эта таблица данных была скопирована R. Избегайте ключа < -, имена < - и attr < - которые в R в настоящее время (и странно) могут копировать все Таблица данных. Вместо этого используйте синтаксис set *, чтобы избежать копирования: setkey(), setnames() и setattr(). Кроме того, список (DT1, DT2) скопирует весь DT1 и DT2 (R list() копирует именованные объекты), вместо этого используйте reflist(), если необходимо (должно быть реализовано). Если это сообщение не помогает, пожалуйста, сообщите о datatable-help, чтобы устранить основную причину.
Просто интересно, есть ли лучший способ разбить таблицу так, чтобы она была более эффективной (и не получила бы это сообщение)?