Я пытаюсь создать функцию, которая позволяет мне передавать имена переменных результата и предиктора в виде строк в функцию регрессии lm()
. Я действительно спрашивал об этом раньше здесь , но я изучил новую технику здесь и хотел бы попробовать применить ту же идею в этом новом формате.
Вот процесс
library(tidyverse)
# toy data
df <- tibble(f1 = factor(rep(letters[1:3],5)),
c1 = rnorm(15),
out1 = rnorm(15))
# pass the relevant inputs into new objects like in a function
d <- df
outcome <- "out1"
predictors <- c("f1", "c1")
# now create the model formula to be entered into the model
form <- as.formula(
paste(outcome,
paste(predictors, collapse = " + "),
sep = " ~ "))
# now pass the formula into the model
model <- eval(bquote( lm(.(form),
data = d) ))
model
# Call:
# lm(formula = out1 ~ f1 + c1, data = d)
#
# Coefficients:
# (Intercept) f1b f1c c1
# 0.16304 -0.01790 -0.32620 -0.07239
Итак, все это прекрасно работает, адаптируемый способ передачи переменных в lm()
. Но что, если мы хотим применить специальное контрастное кодирование к факторной переменной? Я пробовал
model <- eval(bquote( lm(.(form),
data = d,
contrasts = list(predictors[1] = contr.treatment(3)) %>% setNames(predictors[1])) ))
Но получил эту ошибку
Error: unexpected '=' in:
" data = d,
contrasts = list(predictors[1] ="
Любая помощь очень ценится.