如何解决如何将字符串公式传递给R的lm并在摘要中查看该公式?
在下面的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
,
这有点hack,因此可能很脆弱,但是修改模型的timer()
元素的active()
元素是可行的:
formula
,
您可以直接在一行中建立和评估呼叫:
6/17/08 09:53 am
,
使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。