Это проблема окружающей среды. Одним из вариантов будет quote
компонентов, чтобы он не был выполнен
formulas <- list(
quote(mpg ~ disp),
quote(mpg ~ I(1 / disp)),
quote(mpg ~ disp + wt),
quote(mpg ~ I(1 / disp) + wt)
)
out1 <- map(formulas, ~ with(mtcars, lm(eval(.x))))
out1
#[[1]]
#Call:
#lm(formula = eval(.x))
#Coefficients:
#(Intercept) disp
# 29.59985 -0.04122
#[[2]]
#Call:
#lm(formula = eval(.x))
#Coefficients:
#(Intercept) I(1/disp)
# 10.75 1557.67
#[[3]]
#Call:
#lm(formula = eval(.x))
#Coefficients:
#(Intercept) disp wt
# 34.96055 -0.01772 -3.35083
#[[4]]
#Call:
#lm(formula = eval(.x))
#Coefficients:
#(Intercept) I(1/disp) wt
# 19.024 1142.560 -1.798
Он также должен работать с первым методом
out2 <- map(formulas, ~ lm(.x, mtcars))
Там будут небольшие изменения в атрибутах и в call
, но если это игнорируется,
out1[[1]]$call <- out2[[1]]$call
all.equal(out1[[1]], out2[[1]], check.attributes = FALSE)
#[1] TRUE