2012-11-05 18 views
2

這個問題來自於我設法解決的一個更簡單的問題。所以這是我最初的問題。如何僅獲取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

好吧,我在字面意思中,但使用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) 
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值是有點tricker。有this post讀取更多的信息,但在這裏是一個解決方案:

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

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

+0

相關答案[這裏](http://stackoverflow.com/questions/5587676/pull-out-p-values-和-R-平方從-A-線性迴歸/ 5587781#5587781) – Chase