[.data.table
コールのj
スロットに入れる式を作成している間に、.SD
の内容で調べて遊ぶことができると便利なことがよくあります。[.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サブセットに関連するいくつかの他の人をという名前の変数は、ローカル環境内のすべての存在していても
.I
を使用して
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
、私は+/- .SD
のようなものを見ることができますが、その値を直接アクセスできるようにするとよいでしょう:
Browse[1]> DT[.I]
# x y v
# 1: b 1 4
# 2: b 3 5
# 3: b 6 6
私の質問は:なぜbrowser()
コール内から直接利用できません.SD
の期待値は(.I
、.N
、.GRP
と.BY
がありながら)ですか? .SD
の値にアクセスする別の方法はありますか?
私は勝ちましたder、 'browser()'が呼び出されたとき、 '.SD'に実際に何かが設定されていますか? 'str(.SD)'は 'クラス 'data.table'と 'data.frame'を示します:\t 0 obs。 0変数など –
@ GavinSimpson - あなたはおそらくそこに何かあると思います。私が追加した部分的な答えは、その方向の追加の証拠のように思えます。 '.SD'の遅延評価が何らかの形で関与しているかどうかも疑問です。 –