R:以data.frame列名称作为参数的调用函数

问题描述 投票:0回答:1

我有一个带有数字数据的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"?

我已经尝试过涉及this solutionrowwise(),但速度非常慢。 func可以进行矢量化计算。

我当前的解决方案非常难看:

call_str = paste0("func(", paste0(colnames(df), " = df$", colnames(df), collapse=","), ")")
result = eval(parse(text = call_str))

在此示例中,call_str

"func(a = df$a, b = df$b, c = df$c)"
r function arguments parameter-passing
1个回答
0
投票

使用do.call

df %>% mutate(result = do.call("func", .))
© www.soinside.com 2019 - 2024. All rights reserved.