С использованием нестандартной оценки с формулой 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.

0 ответов

Другие вопросы по тегам