7

mutate()Rの(d)plyrパッケージで式を評価する方法はありますか? のような多くの変数がある状況を考えて、count.a, count.b, ..., count.zこれらすべてを合計する新しい変数を作成したいと思います。のような文字列は作れますが、評価さ"count.total = count.a + count.b + (...) + count.z"せるにはどうすれmutate()ばいいですか?

4

1 に答える 1

10

式入力が必要な場合

library(dplyr)
df = data.frame(x = 1:10, y = 2:11)

f = function(df, s){
    eval(substitute(mutate(df, z = s)))
}
f(df, x-y)
f(df, x+y)

文字入力が必要な場合

g = function(df, s){
    q = quote(mutate(df, z = s))
    eval(parse(text=sub("s", s, deparse(q))))
}
g(df, "x-y")
g(df, "x+y")

の名前を入力として受け取るように関数を変更することもできzます。

式の入力:f1すべての追加パラメータをmutatef2渡し、1 つの引数のみをに渡しますmutate

f1 = function(df, ...){
    mutate(df, ...)
}
f1(df, a = x-y)


f2 = function(df, ...){
    dots = substitute(alist(...))
    var = names(dots)[2]
    cal = as.call(list(quote(mutate), quote(df)))
    cal[var] = dots[2]
    eval(cal)
}
f2(df, a = x-y)

繰り返しますが、文字入力を使用する場合は

g1 = function(df, s){
    q = quote(mutate(df, z = s))
    eval(parse(text=sub("z = s", s, deparse(q))))
}
g1(df, "a=x-y")
g1(df, "w=x+y")
于 2014-04-07T10:58:33.877 に答える