如何获取lm对象的特定摘要行

时间:2012-11-05 10:55:15

标签: r summary lm

这个问题来自于我自己设法解决的更容易的问题。所以这是我最初的问题。

在我的数据中,我有很多类别,但我对估计所有类别的系数不感兴趣,我只想测试假设,类别没有差异。在我的对象上调用summary可以生成我报告不需要的大部分信息。

set.seed(42)
dat <- data.frame(cat=factor(sample(1:10, 100, replace=T)), y=rnorm(100))
l1 <- lm(y~cat-1, data=dat)
summary(l1)

如何仅从调用summary(l1)

中提取最后一行

在这种特殊情况下,我可以使用anova函数

anova(l1)

并且只获得了我需要的信息,只是格式与summary(l1)生成的格式不同。

如果我对某个对象有某种摘要并且我想提取summary(object)的特定部分该怎么办?例如,如何让R仅打印调用线summary(l1)

P.S。我知道summary(l1)$fstatistic

2 个答案:

答案 0 :(得分:3)

尝试使用str进行探索。例如,看看

str(summary(l1))

其输出包括

$ fstatistic   : Named num [1:3] 1.32 10 90

然后你可以尝试

summary(l1)$fstatistic

#   value     numdf     dendf 
#1.323275 10.000000 90.000000 

p值有点小问题。阅读this post了解更多信息,但这是一个解决方案:

anova(l1)$"Pr(>F)"[1]
# [1] 0.2303172

......不漂亮,但似乎有效!

答案 1 :(得分:3)

好吧,我有文字心情,但使用capture.output将返回已评估对象的字符表示。例如,使用您的l1对象:

l1Out <- capture.output(summary(l1))
grep("^F-st", l1Out, value = TRUE)
# [1] "F-statistic: 1.323 on 10 and 90 DF,  p-value: 0.2303 "

但请注意,这不是输出的最后一行

tail(l1Out, 1)
# [1] ""

对于摘要对象的许多组件,有更好的方法来提取信息,例如@seancarmody写道

l1$call
# lm(formula = y ~ cat - 1, data = dat)