r - 使用公式进行非标准评估

标签 r tidyeval quosure

我正在创建一个使用 non-standard evaluation 的包跟踪列的含义。该包在函数之间传递数据框,这些函数执行同一组列的各种操作。非标准评估对此非常有用:

my_select <- function(df, xcol, ycol) {
    new_df <- dplyr::select(df, !!xcol, !!ycol)
    new_df
}
my_select(mtcars, quo(wt), quo(mpg))

但是,我想要一个与公式一起使用的函数:

my_lm <- function(df, xcol, ycol) {
    new_lm <- lm(!!xcol, !!ycol, data=df)
    new_lm
}
my_lm(mtcars, quo(wt), quo(mpg)

返回!xcol 中的错误:无效的参数类型。我尝试过 quo()enquo()!! 的各种组合,但基本问题是我不不知道 lm 需要什么样的对象。

最佳答案

您可以通过将方程的值粘贴在一起来创建公式,然后将公式传递给 lm。我确信有更好的方法可以做到这一点,但这是一种可行的方法:


library(rlang)

my_lm <- function(df, xcol, ycol) {
  form <- as.formula(paste(ycol, " ~ ", xcol)[2])
  my_lm <- lm(form, data=df)
  my_lm
}

my_lm(mtcars, quo(wt), quo(mpg))
#> 
#> Call:
#> lm(formula = form, data = mtcars)
#> 
#> Coefficients:
#> (Intercept)           wt  
#>      37.285       -5.344

关于r - 使用公式进行非标准评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46837200/

相关文章:

python - 在 R6 的初始化中调用 R6 类的函数

r - 如何在 "emmeans"中设置置信区间

r - 将列名称作为字符串传递给group_by并进行汇总

r - Keras R 图像分类模型中的形状错误

r - 整洁的Eval : Using {{var}} inside a nesting function not possible?

r - 如何使用字符串连接定义收集函数的关键参数

r - 使用 tidyeval 在自制函数中选择函数

R&quosures - 如何获取作为函数参数传递的向量中包含的符号名称?

如果两个向量之间存在 grep 匹配,则返回数据帧的不同列