在CrossValidated的thread上,我发表了以下评论:
我怀疑这实际上是关于两者之间差异的R问题 使用
访问S3
课程(可通过$
访问)&S4
个类(那个 可以通过@
)...
@Gavin Simpson随后评论说:
@gung很可能会出现,但解决方案可能不 深入研究物体并撕掉你的感受,但要学习使用 提取器函数,在本例中为
coefficients()
或其较短的别名coef()
,coef(fit)
我对此很感兴趣。 为什么使用 coef(model)
优于 model$coefficients[,1]
,例如?(我认识到后者更加丑陋需要稍微多一点的打字,但我怀疑这是原因。)如果没有现有的提取器功能(例如,访问t统计数据)怎么办?
答案 0 :(得分:22)
因为您正在使用的包的作者可以自由地更改模型对象的底层结构,而不必担心破坏每个人的代码。
显然,这也归功于R Core。建议使用那些提取器函数,因为这样你就可以确定它将始终返回正确的信息,即使函数作者发现有必要在引擎盖下随机移动。
也许他们会向模型列表对象的其中一个元素添加更多信息,这会改变一切的顺序?您的所有代码都将中断。
答案 1 :(得分:16)
另一个主要原因是你必须小心你得到的东西。例如,如果你做了什么
mod <- glm(y ~ x1 + x2, data = foo, family = binomial)
mod$residuals
?? (如果你不知道的话,将鼠标悬停在下方以获得答案!)
你得到工作残差,对许多人来说可能不是很有用
提取器函数知道这一点,并将返回一些有用的东西,或者允许使用它来提取所搜索组件的不同方面。
我总是告诉别人我教R他们不应该使用$
或@
,除非他们非常熟悉被访问的方法和对象,而且从不在生产代码中 - 你只是如果你这样做就惹麻烦。