4

这个问题来自我设法解决的更简单的问题。所以这是我原来的问题。

在我的数据中,我有很多类别,但我对估计所有类别的系数不感兴趣,我只是想检验一个假设,即类别没有区别。调用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)

如何仅从 call to 中提取最后一行summary(l1)

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

anova(l1)

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

如果我对某个对象有某种摘要,而我只想提取其中的特定部分,summary(object)该怎么办?例如,如何R只打印 call 行summary(l1)

ps 我知道summary(l1)$fstatistic

4

2 回答 2

4

尝试使用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 值有点小技巧。阅读这篇文章以获取更多信息,但这里有一个解决方案:

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

...不漂亮,但它似乎工作!

于 2012-11-05T11:02:49.623 回答
4

好的,我在字面上的心情,但 usingcapture.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)
于 2012-11-05T11:17:36.033 回答