R 使用mutate()进行公式计算

R 使用mutate()进行公式计算,r,plyr,dplyr,R,Plyr,Dplyr,有没有办法让mutate()在R的(d)plyr包中计算公式?我想到的情况是,一个人有很多变量,比如count.a,count.b,…,count.z,我想创建一个新变量来求和所有这些变量。我可以创建一个字符串,比如“count.total=count.a+count.b+(…)+count.z”,但是如何使mutate()对其求值呢?如果需要表达式输入 library(dplyr) df = data.frame(x = 1:10, y = 2:11) f = function(df, s)

有没有办法让
mutate()
在R的(d)plyr包中计算公式?我想到的情况是,一个人有很多变量,比如
count.a,count.b,…,count.z
,我想创建一个新变量来求和所有这些变量。我可以创建一个字符串,比如
“count.total=count.a+count.b+(…)+count.z”
,但是如何使
mutate()
对其求值呢?

如果需要表达式输入

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")
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")

您还可以修改函数,将
z
的名称作为输入

表达式输入:
f1
将所有额外参数传递给
mutate
f2
仅将一个参数传递给
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)
同样,如果要使用字符输入

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")
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")

回答得很好,谢谢。如果您可以修改函数,使其以z的名称作为参数,这将对阅读此问题的人有很大帮助。