在构造表达式以放入调用的j
-slot 时[.data.table
,能够检查和使用.SD
.
这种天真的尝试是行不通的……
library(data.table)
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
DT[, browser(), by=x]
# Called from: `[.data.table`(DT, , browser(), by = x)
Browse[1]>
Browse[1]> .SD
# NULL data.table
...即使一个名为的变量.SD
和与当前 data.table 子集相关的其他几个变量都存在于本地环境中
Browse[1]> ls(all.names = TRUE)
# [1] ".BY" ".GRP" ".I" ".iSD" ".N" ".SD"
# [7] "Cfastmean" "mean" "print" "x"
Browse[1]> .N
# [1] 3
Browse[1]> .I
# [1] 4 5 6
使用.I
,我可以查看 +/- 之类.SD
的内容,但能够直接访问其值会很好:
Browse[1]> DT[.I]
# x y v
# 1: b 1 4
# 2: b 3 5
# 3: b 6 6
我的问题:.SD
为什么不能直接从调用中获得期望值(browser()
while .I
、.N
和are)?是否有其他方法可以访问 的值?.GRP
.BY
.SD