Понимание .I в data.table в R

Я играл с data.table, и я наткнулся на различие, которое я не уверен, что вполне понимаю. Учитывая следующий набор данных:

library(data.table)

set.seed(400)
DT <- data.table(x = sample(LETTERS[1:5], 20, TRUE), key = "x"); DT

Не могли бы вы объяснить мне разницу между следующими выражениями?

1) DT[J("E"), .I]

2) DT[ , .I[x == "E"] ]

3) DT[x == "E", .I]

Ответы

Ответ 1

set.seed(400)
library(data.table)

DT <- data.table(x = sample(LETTERS[1:5], 20, TRUE), key = "x"); DT

1)

DT[  , .I[x == "E"] ] # [1] 18 19 20

- таблица данных, где .I - вектор, представляющий номер строки E в ORIGINAL dataset DT

2)

DT[J("E")  , .I]   # [1] 1 2 3

DT["E"     , .I]   # [1] 1 2 3

DT[x == "E", .I]   # [1] 1 2 3

- все равно, создавая вектор, где .I - векторы, представляющие номера строк E в НОВЫХ подмножествах данных