我正在创建一个使用 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/