Я хотел бы создать функцию, которая может запускать регрессионную модель (например, используя 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", без значения по умолчанию
У кого-нибудь есть идеи о том, как изменить код, чтобы это работало?
Спасибо
Joost.