这个问题来自于我自己设法解决的更容易的问题。所以这是我最初的问题。
在我的数据中,我有很多类别,但我对估计所有类别的系数不感兴趣,我只想测试假设,类别没有差异。在我的对象上调用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
。
答案 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)