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

Jon*_*aus 4 r glm

在R中,回归函数glm产生一个类的对象,glm它是一个列表.

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

例如,if 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
Run Code Online (Sandbox Code Playgroud)

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

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

> fit$coefficients
(Intercept)          V3          V2          V1 
   1.349282    1.593067    1.576868    1.127067 
Run Code Online (Sandbox Code Playgroud)

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

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

Jos*_*ien 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
Run Code Online (Sandbox Code Playgroud)

以下任一项都将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
Run Code Online (Sandbox Code Playgroud)