以下代码使用for循环或lapply将4个不同的模型公式拟合到mtcars
数据集。在这两种情况下,结果中存储的公式都称为formulas[[1]]
,formulas[[2]]
等,而不是人类可读的公式。
formulas <- list(
mpg ~ disp,
mpg ~ I(1 / disp),
mpg ~ disp + wt,
mpg ~ I(1 / disp) + wt
)
res <- vector("list", length=length(formulas))
for (i in seq_along(formulas)) {
res[[i]] <- lm(formulas[[i]], data=mtcars)
}
res
lapply(formulas, lm, data=mtcars)
有没有办法让结果中显示完整,可读的公式?
答案 0 :(得分:6)
这应该有效
lapply(formulas, function(x, data) eval(bquote(lm(.(x),data))), data=mtcars)
它返回
[[1]]
Call:
lm(formula = mpg ~ disp, data = data)
Coefficients:
(Intercept) disp
29.59985 -0.04122
[[2]]
Call:
lm(formula = mpg ~ I(1/disp), data = data)
Coefficients:
(Intercept) I(1/disp)
10.75 1557.67
....etc
我们使用bquote
将公式插入到lm
的调用中,然后评估表达式。
答案 1 :(得分:1)
为什么不呢:
lapply( formulas, function(frm) lm( frm, data=mtcars))
#------------------
[[1]]
Call:
lm(formula = frm, data = mtcars)
Coefficients:
(Intercept) disp
29.59985 -0.04122
[[2]]
Call:
lm(formula = frm, data = mtcars)
Coefficients:
(Intercept) I(1/disp)
10.75 1557.67
snpped....
如果您希望结果的名称具有公式的'字符'版本,那么它就是“
names(res) <- as.character(formulas)
res[1]
#-----
$`mpg ~ disp`
Call:
lm(formula = frm, data = mtcars)
Coefficients:
(Intercept) disp
29.59985 -0.04122
答案 2 :(得分:0)
您还可以尝试类似的操作
FileName