【发布时间】:2019-11-17 21:00:37
【问题描述】:
我想对 tibble 中的同一列应用不同的功能。这些函数存储在字符串中。我曾经使用mutate_ 和.dots 参数来做到这一点,如下所示:
library(dplyr)
myfuns <- c(f1 = "a^2", f2 = "exp(a)", f3 = "sqrt(a)")
tibble(a = 1:3) %>%
mutate_(.dots = myfuns)
这种方法仍然可以正常工作,但 mutate_ 已被弃用。我尝试使用mutate 和rlang 包来达到相同的结果,但并没有走得太远。
在我的真实示例中,myfuns 包含大约 200 个函数,因此不能一个一个地键入它们。
提前致谢。
【问题讨论】:
-
“这些函数存储在一个字符串中。” ——这基本上是个坏主意。这些功能从何而来?如果在代码中,将它们存储为未计算的表达式或实际函数。不要(ab)使用字符串来表示代码。
-
嗯,说来话长。基本上每个组件都是一个冗长的公式,可以用某个公式“拼写”出来。这就是它们存储在字符串中的原因。我不知道(现在仍然不)有任何其他方法可以规避这一点。
-
如果它可以拼写为字符串,那么它肯定也可以拼写为代码吗?只需删除周围的
"…"并使用公式 (~ …) 或 函数 (function (x) …)。 -
谢谢康拉德,我会试试的。
-
所以我刚刚意识到 AntoniosK 的回答基本上是相同的,除了您可以稍微简化代码,因为没有理由将纯函数调用包装到公式中:
myfuns = c(f1 = ~ . ^ 2, f2 = exp, f3 = sqrt)。不过,要对多个变量执行相同操作,您需要使用 quosures/rlang。