3
私は変数名にdata.table
の列名を格納しています。これらの変数を介して列を参照する必要があります。私はコードを動作させましたが(下の例)、私は時々get()
といつかeval()
を使う必要があるという手掛かりはありません。誰かがこれを明確にすることはできますか?R - 列名をdata.tableに渡す式 - getとevalの差
# generate some data
foo <- rep(1:2,each = 3)
bar <- rep(c("A","B","C"),2)
baz <- rep(1:5,2)[1:6]
df <- data.frame(foo,bar,baz)
setDT(df)
# refer to columns directly by their names
df[, "qux":=baz-baz[bar=="C"], by=foo]
# save column names into variables and call columns via these variables
var1 <- "foo"
var2 <- "bar"
var3 <- "baz"
varNew <- "qux2"
df[, eval(varNew) := get(var3) - get(var3)[get(var2) == "C"], by = get(var1)]
df
foo bar baz qux qux2
1: 1 A 1 -2 -2
2: 1 B 2 -1 -1
3: 1 C 3 0 0
4: 2 A 4 3 3
5: 2 B 5 4 4
6: 2 C 1 0 0
'eval(varNew)'は単一の文字列 'qux2'を返し、' get(var1) 'は' var1'のすべての値を返します。この場合、 'var1'は' foo 'なので 'get(var1)'は '' foo''にあるものの値を返します。言い換えれば、あなたの例では、 'eval'は単一の文字列を返し、' get'は各列の値を返します。 – steveb
'by = get(。)'を 'by'引数として使用する必要はありません。 – jangorecki
の文字ベクトルを受け入れます。多くの場合、bquoteを使って式全体を構築し、それを評価することでこの問題を回避できます –