在用户创建的函数中对公式语法使用准引号? [英] Use quasiquotation for formula syntax in a user-created function?
本文介绍了在用户创建的函数中对公式语法使用准引号?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我运行此代码时:
# Create example data
df <- tibble(age=rnorm(10),
income=rnorm(10))
make_model <- function(response_var, df){
# Create formula
form <- as.formula(response_var ~ .)
# Create model
model <- lm(form , data=df)
# Return coefficients
return(coef(model))
}
make_model(income, df)
我收到以下错误
Error in eval(predvars, data, env) : object 'income' not found
如何使用 quasiquotation 使此函数起作用?我假设逻辑与我们如何调用 library(dplyr)
而不是 library("dplyr")
相同.
How can I make this function work using quasiquotation? I assume the logic is the same as how we can call library(dplyr)
instead of library("dplyr")
.
推荐答案
使用 blast()
(将包含在 rlang 0.5.0 中)
Use blast()
(to be included in rlang 0.5.0)
blast <- function(expr, env = caller_env()) {
eval_bare(enexpr(expr), env)
}
make_model <- function(data, column) {
f <- blast(!!enexpr(column) ~ .)
model <- lm(f, data = data)
coef(model)
}
df <- data.frame(
age = rnorm(10),
income = rnorm(10)
)
make_model(df, income)
#> (Intercept) age
#> -0.3563103 -0.2200773
工作灵活:
blast(list(!!!1:3))
#> [[1]]
#> [1] 1
#>
#> [[2]]
#> [1] 2
#>
#> [[3]]
#> [1] 3
这篇关于在用户创建的函数中对公式语法使用准引号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文