【发布时间】:2018-04-02 17:37:17
【问题描述】:
我正在尝试使用 tidyeval(非标准评估)围绕“lm”编写一个函数。使用基本 R NSE,它可以工作:
lm_poly_raw <- function(df, y, x, degree = 1, ...){
lm_formula <-
substitute(expr = y ~ poly(x, degree, raw = TRUE),
env = list(y = substitute(y),
x = substitute(x),
degree = degree))
eval(lm(lm_formula, data = df, ...))
}
lm_poly_raw(mtcars, hp, mpg, degree = 2)
但是,我还没有弄清楚如何使用tidyeval 和rlang 编写这个函数。我假设substitute 应该替换为enquo,而eval 应该替换为!!。 Hadley 的 Adv-R 中有一些提示,但我想不通。
【问题讨论】:
-
你为什么要这样做?
-
为了使用 dplyr 函数进行编程,使用 tidyeval/rlang 很有用,我只想使用一个系统。 Beides,我想向一些学生解释,我认为只使用一个系统更容易,更一致。
-
鉴于 lm() 不使用与 dplyr 相同的 NSE 形式,我认为用 rlang 打它不会有帮助。