我想要遍历一个潜在解释变量的长向量,
依次对每个变量回归响应变量。而不是粘贴在一起
模型公式,我正在考虑使用reformulate()
,
如此处所示.
功能fun()
下面似乎可以完成工作,拟合所需的模型。但请注意,
它在其调用元素中记录name构造的公式对象的
而不是它的value.
## (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
, or 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)