繁体   English   中英

R:调用 function,data.frame 列名称为 arguments

[英]R: call function with data.frame column names as arguments

我有一个带有数字数据的data.frame和一个 function,它将列名作为 arguments。 如何将这些列称为 arguments 的 function? 类似于 python 的解包。

我不能硬编码的原因是列名、列数和 function 本身会发生变化 - 但总是使列名与 function ZDBC11CAA5BDA99F77E6FB4DADBD88E 匹配。

这是问题的简单版本。

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_str

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

使用do.call

df %>% mutate(result = do.call("func", .))

或在 purrr 中invoke类似 function :

library(purrr)
df %>% mutate(result = invoke("func", .))

lift作用于 function 本身,产生新的 function:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM