R данные.набор клавиш таблицы в числовом столбце

#r #data.table

#r #данные.таблица

Вопрос:

Нам действительно нужно добавить J() для выбора числового столбца?

Мы можем получить результат для символьного столбца без J() .

 library(data.table)
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
setkey(DT,x)  
DT["a"]  
#    x y v
# 1: a 1 1
# 2: a 3 2
# 3: a 6 3

setkey(DT,y)  
DT["1"]  
# Error in `[.data.table`(DT, "1") : 
#  typeof x.y (double) != typeof i.y (character)

# Is it a bug?

DT[J(1)]
#    y x v
# 1: 1 a 1
# 2: 1 b 4
# 3: 1 c 7
  

Спасибо!

Комментарии:

1. @G.Grothendieck — Почему бы не опубликовать это в качестве ответа?

2. ОК. Перенесли это в ответы.

3. К вашему сведению, вы также можете использовать .(1) вместо J(1) .

Ответ №1:

Причина, по которой это DT[1] не совпадает с DT[J(1)] , заключается в том, что существуют ДВЕ разные интерпретации, которые мы могли бы захотеть:

  1. первая строка, DT[1]
  2. все строки, для которых ключ равен 1 , DT[J(1)]

Потенциальная двусмысленность существует только в том случае, если первый аргумент является числовым, поэтому для двух ситуаций существуют два разных обозначения.

В случае символьного ключа эта потенциальная двусмысленность не возникает, поскольку символьный аргумент может означать только второй случай.

Кроме того, DT["1"] это ошибка в коде вопроса, поскольку ключ в примере не является символом, а data.table не выполняет приведение типов здесь.