Есть ли подводные камни в использовании программно построенных формул?

Я хочу пробежаться по длинному вектору потенциальных объясняющих переменных, регрессируя переменную ответа по каждой из них по очереди. Вместо того, чтобы склеивать формулу модели, я думаю об использованииreformulate(), как показано здесь.

Функцияfun() Ниже, кажется, делать работу, подгоняя нужную модель. Обратите внимание, однако, что он записывает в свой элемент вызоваимя построенного объекта формулы, а не егостоимость.

## (1) Function using programmatically constructed formula
fun <- function(XX) {
    ff <- reformulate(response="mpg", termlabels=XX)
    lm(ff, data=mtcars)
}
fun(XX=c("cyl", "disp"))
# 
# Call:
# lm(formula = ff, data = mtcars)                 <<<--- Note recorded call
# 
# Coefficients:
# (Intercept)          cyl         disp  
#    34.66099     -1.58728     -0.02058  

## (2) Result of directly specified formula (just for purposes of comparison)
lm(mpg ~ cyl + disp, data=mtcars)
# 
# Call:
# lm(formula = mpg ~ cyl + disp, data = mtcars)   <<<--- Note recorded call
# 
# Coefficients:
# (Intercept)          cyl         disp  
#    34.66099     -1.58728     -0.02058  

Мой вопрос: Есть ли в этом опасность? Может ли это стать проблемой, если, например, я хочу позже применитьupdate, или жеpredict или какая-то другая функция для объекта подгонки модели (возможно, из какой-то другой среды)?

Немного более неловкая альтернатива, которая, тем не менее, дает право записанного звонка правильно - это использоватьeval(substitute()), Это вообще безопасная конструкция?

fun2 <- function(XX) {
    ff <- reformulate(response="mpg", termlabels=XX)
    eval(substitute(lm(FF, data=mtcars), list(FF=ff)))
}
fun2(XX=c("cyl", "disp"))$call
## lm(formula = mpg ~ cyl + disp, data = mtcars)

Ответы на вопрос(1)

Ваш ответ на вопрос