[英]How to pass string formula to R's lm and see the formula in the summary?
在下面的 R 會話中, summary(model)
將公式顯示為model_str
。 如何讓它顯示為mpg ~ cyl + hp
同時仍然能夠通過字符串設置模型公式?
> data(mtcars)
> names(mtcars)
[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"
> model_str <- 'mpg ~ cyl + hp'
> model <- lm(model_str, data=mtcars)
> summary(model)
Call:
lm(formula = model_str, data = mtcars)
Residuals:
Min 1Q Median 3Q Max
-4.4948 -2.4901 -0.1828 1.9777 7.2934
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 36.90833 2.19080 16.847 < 2e-16 ***
cyl -2.26469 0.57589 -3.933 0.00048 ***
hp -0.01912 0.01500 -1.275 0.21253
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.173 on 29 degrees of freedom
Multiple R-squared: 0.7407, Adjusted R-squared: 0.7228
F-statistic: 41.42 on 2 and 29 DF, p-value: 3.162e-09
使用do.call
以便model_str
在發送到lm
之前得到評估,但引用mtcars
使其不是(否則會有大量輸出顯示mtcars
的實際值)。
do.call("lm", list(as.formula(model_str), data = quote(mtcars)))
給予:
Call:
lm(formula = mpg ~ cyl + hp, data = mtcars)
Coefficients:
(Intercept) cyl hp
36.90833 -2.26469 -0.01912
這有點黑客,所以可能很脆弱,但修改模型的call
元素的formula
元素有效:
model$call$formula <- formula(model_str)
summary(model)
## Call:
## lm(formula = mpg ~ cyl + hp, data = mtcars)
您可以直接在一行中構建和評估調用:
eval(as.call(list(quote(lm), formula = model_str, data = quote(mtcars))))
#>
#> Call:
#> lm(formula = "mpg ~ cyl + hp", data = mtcars)
#>
#> Coefficients:
#> (Intercept) cyl hp
#> 36.90833 -2.26469 -0.01912
使用str2lang
,然后使用do.call
。
fo <- str2lang("mpg ~ hp + am")
do.call("lm", list(fo, quote(mtcars)))
#
# Call:
# lm(formula = mpg ~ hp + am, data = mtcars)
#
# Coefficients:
# (Intercept) hp am
# 26.58491 -0.05889 5.27709
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.