r - 在不同变量上运行 lm 的函数
问题描述
我想创建一个函数,它可以在给定数据集中的不同变量上运行回归模型(例如使用 lm)。在这个函数中,我将指定我正在使用的数据集、因变量 y 和自变量 x 作为参数。我希望这是一个函数而不是循环,因为我想在脚本的各个位置调用代码。我的天真函数看起来像这样:
lmfun <- function(data, y, x) {
lm(y ~ x, data = data)
}
该函数显然不起作用,因为 lm 函数无法将 y 和 x 识别为数据集的变量。
我做了一些研究,偶然发现了以下有用的小插曲:用 dplyr 编程。小插图为我面临的类似问题提供了以下解决方案:
df <- tibble(
g1 = c(1, 1, 2, 2, 2),
g2 = c(1, 2, 1, 2, 1),
a = sample(5),
b = sample(5)
)
my_sum <- function(df, group_var) {
group_var <- enquo(group_var)
df %>%
group_by(!! group_var) %>%
summarise(a = mean(a))
}
我知道 lm 不是 dplyr 包的一部分,但想提出一个类似的解决方案。我尝试了以下方法:
lmfun <- function(data, y, x) {
y <- enquo(y)
x <- enquo(x)
lm(!! y ~ !! x, data = data)
}
lmfun(mtcars, mpg, disp)
运行此代码会给出以下错误消息:
is_quosure(e2) 中的错误:缺少参数“e2”,没有默认值
任何人都知道如何修改代码以使其工作?
谢谢,
约斯特。
解决方案
您可以使用quo_name
's 和解决此问题formula
:
lmfun <- function(data, y, x) {
y <- enquo(y)
x <- enquo(x)
model_formula <- formula(paste0(quo_name(y), "~", quo_name(x)))
lm(model_formula, data = data)
}
lmfun(mtcars, mpg, disp)
# Call:
# lm(formula = model_formula, data = data)
#
# Coefficients:
# (Intercept) disp
# 29.59985 -0.04122
推荐阅读
- c++ - Qt setFilter 搜索?
- python - 使用 python 从部分之间的简单 .txt 文档中提取文本
- sql - 透视 SQL 表 | 将列值转换为列标题
- c - 为什么您不必从递归函数返回值以在 C 中获得正确的返回值?
- handlebars.js - 有没有办法将 javascript 变量插入 Bigcommerce Handlebars
- sql - 透视具有多个联合的查询
- hololens - MRTK 问题
- mysql - MySQL优化500M+行表
- javascript - 覆盖 DevExpressReactive Grid 库中的表编辑行以使受控文本字段相互依赖
- angular - 具有 Angular Universal 的 Angular 元素