6

jで動作する式を記述する場合、テーブル内のすべての列data.table.SDはなく、式が使用する列のみが含まれます。これは実行には問題ありませんが、デバッグには最適ではありません。すべての列を表示する最良の方法は何ですか? すべての名前を渡すことができます.SDcolsが、これはかなり面倒です。元:

x = data.table(a=1:10, b=10:1, id=1:5)
x[,{ browser(); a+1},by=id]
Called from: `[.data.table`(x, , {
    browser()
    a + 1
}, by = id)
Browse[1]> n
debug at #1: a + 1
Browse[1]> .SD
   a
1: 1
2: 6
4

1 に答える 1

7

のすべての列を使用可能にするには、式.SDのどこかでそれを参照するだけです。jたとえば、これを試してください:

x[,{.SD; browser(); a+1},by=id]
# Called from: `[.data.table`(x, , {
#     .SD
#     browser()
#     a + 1
# }, by = id)
Browse[1]> .SD
#    a  b
# 1: 1 10
# 2: 6  5

ここで説明されているように、これは機能します

[.data.table()[...] 未評価の j 式をプレビューし、その中で参照されている .SD 列にのみ追加します。.SD 自体が言及されている場合、DT のすべての列が追加されます。


.SDまたは、グループごとの計算ごとに の列をロードする費用を負担したくない場合は、xを呼び出して、現在ロードされている のサブセットをいつでも調べることができますx[.I,]。(現在のグループ.Iの行の位置を格納する変数ですx):

x[,{browser(); a+1},by=id]
# Called from: `[.data.table`(x, , {
#     browser()
#     a + 1
# }, by = id)
Browse[1]> x[.I,]
#    a  b id
# 1: 1 10  1
# 2: 6  5  1
于 2013-05-15T18:31:00.570 に答える