括号前的点,.( ),在 data.table 中

Dot preceding parentheses, .( ), in data.table

提问人:Hack-R 提问时间:11/20/2015 最后编辑:HenrikHack-R 更新时间:8/5/2021 访问量:2703

问:

我不熟悉这个符号。如果我遗漏了一些明显的东西,我深表歉意,但我找不到对这种符号样式的引用,尽管它看起来非常有用。df[, .(...), Col]

它似乎正在实现聚合。根据此符号在以下代码中的位置,我希望它来自不是来自,但我尝试检查两者都无济于事。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")

我希望文档和/或对此有很好的解释。

R Data.Table 卡格尔

评论

5赞 MichaelChirico 11/20/2015
这是语法(请参阅您链接的代码的第 24 行,有关详细信息,请参见 ?data.table::d ata.table)。从 1.9.5 开始,是 的别名。data.table.(...)list(...)
0赞 Pierre L 11/20/2015
在第 30 行创建。该函数默认为该结构。data.tablefread

答:

7赞 Josh O'Brien 11/20/2015 #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")

另请参阅小插图 data.table 简介

data.table还允许用 而不是 来包装列。它是 的别名 ;它们都是一样的意思。随意使用您喜欢的任何一种.()list()list()

评论

0赞 Hack-R 11/20/2015
我知道我固执地拒绝变得更熟悉会困扰我!非常感谢data.table
0赞 MichaelChirico 11/20/2015
@Hack-R Arun 的小插图是让你的脚湿的好地方
1赞 Hack-R 11/20/2015
@MichaelChirico 谢谢,是的,我检查了我认为可能相关的小插曲,我只是没有意识到哪个小插曲与此有关。这不是你可以用一个简单的函数名称来发现的东西,因为你可以查看它与哪个包相关联。?