С использованием нестандартной оценки с формулой Bis
Нестандартная оценка в R. Я хочу отправить формулу функции, которая использует lm
,
У меня есть фрейм данных с одним ответом: у и много предикторов. Я подгоню модель внутри функции. Функция получит критерии фильтрации в виде строки и имя переменной предиктора в виде строки. Ответ будет введен как имя. Функция отфильтрует по критериям фильтра, затем подгонит модель, используя переменную предиктора, которая была отправлена ей в виде строки. Я не могу заставить строку предиктора работать правильно.
Это очень близко к использованию нестандартной оценки с формулой. На самом деле я иллюстрирую это решение, которое помогает мне в этом. Разница: я хочу отправить строку со значением моего предиктора вместо отправки предиктора в функцию.
Вариант использования: в конце концов я положу это в блестящую точку доступа и позволю пользователю выбрать предиктор и ответ, а также фильтр.
Вот что работает:
# create a data frame.
n <- 100
levels_1 <- sample(c("a","b","c"),n,replace=TRUE)
levels_2 <- sample(c("a","b","c"),n,replace=TRUE)
d <-tibble(l_1 = levels_1 ,l_2 = levels_2, y = rnorm(n))
# A function that works
my_lm <- function(d,predictor,response,filter_criteria){
d1 <- d %>% filter(l_2 == 'a')
lm(y ~ l_1,data=d1)
}
my_lm(d,l_1,y,'a')
my_lm2 <- function(d,predictor,response,filter_criteria){
enquo_predictor <- enquo(predictor)
enquo_response <- enquo(response)
enquo_filter_criteria <- enquo(filter_criteria)
d1 <- d %>% filter(l_2 == !!filter_criteria)
form <- as.formula(paste(enquo_response, " ~ ", predictor)[2])
# form <- as.formula(paste(enquo_response, " ~ ", enquo_predictor)[2]) wrong way to do it.
lm(form,data=d1)
#lm(!!enqu_preditor ~ !!enquo_response,data=d1)
}
selected_var <- names(d)[1]
selected_var
filter_value <- 'a'
my_lm2(d,l_1,y,filter_value) # This works but is not what I want.
my_lm2(d,selected_var,y,filter_value) # This does not work but is what I want to work.