Точка, предшествующая скобкам в data.table

Я не знаком с этим df[, .(...), Col] нотации. Я извиняюсь, если упускаю что-то очевидное, но не могу найти ссылку на этот стиль обозначений, хотя это выглядит очень полезным.

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

Пример взят из конкурса Kaggle, и код работает (для воспроизведения перейдите сюда):

trainHex<-as.h2o(train[,.(
  dist   = mean(radardist_km, na.rm = T),
  refArea5   = mean(Ref_5x5_50th, na.rm = T),
  refArea9  = mean(Ref_5x5_90th, na.rm = T),
  meanRefcomp = mean(RefComposite,na.rm=T),
  meanRefcomp5 = mean(RefComposite_5x5_50th,na.rm=T),
  meanRefcomp9 = mean(RefComposite_5x5_90th,na.rm=T),
  zdr   = mean(Zdr, na.rm = T),
  zdr5   = mean(Zdr_5x5_50th, na.rm = T),
  zdr9   = mean(Zdr_5x5_90th, na.rm = T),
  target = log1p(mean(Expected)),
  meanRef = mean(Ref,na.rm=T),
  sumRef = sum(Ref,na.rm=T),
  records = .N,
  naCounts = sum(is.na(Ref))
),Id][records>naCounts,],destination_frame="train.hex")

Я хотел бы документацию и / или хорошее объяснение этого.

1 ответ

Решение

.() является удобной функцией data.table, действующей как краткий псевдоним для list(), Сложность имеет значение немного (в основном для тех, кто, как и вы, пытается выяснить, какого черта это . делает!) тот факт, что это только интерпретируется как таковой в рамках вызова [.data.table(),

Здесь, из ?data.table:

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

 DT["a"]                    # join to 1st column of key
 DT[.("a")]                 # same, .() is an alias for list()
 DT[list("a")]              # same

 ## But note that *this* doesn't work (my addition --- not in ?data.table)
 .("a")
Другие вопросы по тегам