#r #data.table
#r #data.table
Вопрос:
Я хотел бы спросить, является ли следующее поведение data.table
функцией или ошибкой.
Учитывая data.table
dt = data.table(
group = c(rep('group1',5),rep('group2',5)),
x = as.numeric(c(1:5, 1:5)),
y = as.numeric(c(5:1, 5:1)),
z = as.numeric(c(1,2,3,2,1, 1,2,3,2,1))
)
и вектор имен столбцов, содержащий дубликат,
cols = c('y','x','y','z') # contains a duplicate column name
data.table
справедливо мешает мне присваивать значения повторяющимся именам столбцов:
dt[,(cols) := lapply(.SD,identity), .SDcols=cols] # Error (OK)
Мне это кажется подходящим поведением, потому что это может помочь избежать непредвиденных последствий. Однако, если я выполняю одно и то же назначение по группам,
dt[,(cols) := lapply(.SD,identity), .SDcols=cols, by=group] # No error!
затем data.table
не выдает ошибку. Назначение выполняется, и можно проверить, что столбцы y
и z
были заменены.
Это произошло со мной в большом приложении при унизительном разбиении переменных по группам, и было трудно отследить источник такого поведения. Рекомендация для пользователя, конечно, заключается в том, чтобы избегать повторяющихся имен столбцов при назначении и избегать предоставления повторяющихся имен .SDcols
. Однако, не было бы лучше data.table
выдать ошибку в этой ситуации?
Комментарии:
1. Звучит как сообщение об ошибке .
Ответ №1:
Это ошибка, которая была исправлена в версии 1.12.4 data.table
. Вот сообщение об ошибке: https://github.com/Rdatatable/data.table/issues/4874 .
Другие пользователи с этой проблемой могут просто обновить версию своего пакета, например, используя install.packages('data.table')
. Чтобы проверить текущую версию пакета, загрузите data.table
, а затем просмотрите выходные sessionInfo()
данные .
Но было бы разумно избегать предоставления повторяющихся имен столбцов .SDcols
.