将`glm`生成的对象视为R中的列表

时间:2013-06-24 20:00:40

标签: r glm

在R中,回归函数glm生成类glm的对象,这是一个列表。

由于它是一个列表,我应该能够查看类glm的对象作为列表而不进行任何格式化。但是,as.list似乎没有这样做。

例如,如果fit是由函数glm拟合的模型:

> as.list(fit)

Call:  glm(formula = V4 ~ V3 + V2 + V1, family = Gamma, data = data)

Coefficients:
(Intercept)           V3           V2           V1  
      1.349        1.593        1.577        1.127  

Degrees of Freedom: 9999 Total (i.e. Null);  9996 Residual
Null Deviance:      2137 
Residual Deviance: 2048         AIC: -30180

另一方面,适用于列表的其他函数正常工作,例如names将生成相关列表的30个名称。

此外,我可以按照与其他任何列表相同的方式查看单个元素:

> fit$coefficients
(Intercept)          V3          V2          V1 
   1.349282    1.593067    1.576868    1.127067 

是否有任何预先存在的功能可以让我在列表中查看fit而不进行格式化?

正如我上面所说的,我可以使用列表的名称构建自己的函数,但对于这么简单的任务来说,这似乎是不必要的。

1 个答案:

答案 0 :(得分:7)

虽然fit 列表,但它具有类glm,因此自动打印它会调度print.glm()打印方法。如下所示,as.list()保留了对象的类,因此根本没有帮助。

fit <- glm(speed~dist, data=cars)  ## A silly example
class(fit)
# [1] "glm" "lm" 
class(as.list(fit))
# [1] "glm" "lm" 
exists("print.glm")
# [1] TRUE

以下任何一项都会将fit打印为列表。

unclass(fit)        ## Returns and immediately auto-prints object of class "list"
                    ## using print.default() 

print.default(fit)  ## Bypasses method dispatch, directly calling desired print
                    ## method