R:使用data.frame列名作为参数调用函数

R:使用data.frame列名作为参数调用函数,r,function,arguments,parameter-passing,R,Function,Arguments,Parameter Passing,我有一个带有数字数据的data.frame,还有一个将列名作为参数的函数。如何使用这些列作为参数调用函数?类似于python的解包 我不能硬编码它的原因是列名、列数和函数本身都会发生变化,但总是使列名与函数参数匹配 下面是这个问题的一个简单版本 func = function(a, b, c) a * b^2 + c df = data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10)) df %>% mutate(result =

我有一个带有数字数据的
data.frame
,还有一个将列名作为参数的函数。如何使用这些列作为参数调用函数?类似于python的解包

我不能硬编码它的原因是列名、列数和函数本身都会发生变化,但总是使列名与函数参数匹配

下面是这个问题的一个简单版本

func = function(a, b, c) a * b^2 + c
df = data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10))
df %>%
    mutate(result = func(.))  # what to do here that doesn't involve "a", "b", "c"?
我尝试了一个包含
rowwise()
的方法,但是速度非常慢
func
可以进行矢量化计算

我目前的解决方案相当丑陋:

call_str = paste0("func(", paste0(colnames(df), " = df$", colnames(df), collapse=","), ")")
result = eval(parse(text = call_str))
在本例中,
call\u str

"func(a = df$a, b = df$b, c = df$c)"

使用
do.call

df %>% mutate(result = do.call("func", .))
或者调用purrr中类似的函数:

library(purrr)
df %>% mutate(result = invoke("func", .))
提升
,作用于功能本身,产生新功能:

library(purrr)
df %>% mutate(result = lift(func)(.))