25

CrossValidatedのスレッドで、次のコメントをしました。

S3これは実際には、クラス(経由でアクセスされる$)とS4クラス(経由でアクセスされる)の操作の違いについてのRの質問だと思います@...

@Gavin Simpson はその後、次のようにコメントしています。

@gung はおそらくスポットライトですが、解決策はおそらく、オブジェクトを掘り下げて感じたものをすべて切り取るのではなく、抽出関数の使用法を学ぶことです。この場合coefficients()またはその短いエイリアス coef()のようにcoef(fit)

私はこれに興味をそそられます。 たとえば、なぜ を使用 coef(model) する方が を使用するよりも優れているのでしょうか? (後者の方が見栄えが悪く、少し多くのタイピングが必要であることは認識していますが、それが意図された理由であるとは思えません。) 既存の抽出関数がない場合 (たとえば、t 統計へのアクセス) はどうでしょうか? model$coefficients[,1]

4

2 に答える 2

26

使用しているパッケージの作成者は、モデル オブジェクトの基本構造を自由に変更できるため、他のユーザーのコードが壊れることを心配する必要はありません。

明らかに、これは R Core にも一般化されます。これらのエクストラクタ関数を使用することをお勧めします。これにより、関数の作成者が内部でシャッフルする必要があると判断した場合でも、常に正しい情報が返されることが保証されます。

モデル リスト オブジェクトの要素の 1 つにさらに情報を追加すると、すべての順序が変わるのではないでしょうか? すべてのコードが壊れます。

于 2013-07-24T03:02:56.537 に答える
16

もう 1 つの主な理由は、取得する内容に注意する必要があることです。たとえば、次のことを行うと何が得られますか

mod <- glm(y ~ x1 + x2, data = foo, family = binomial)
mod$residuals

?? (わからない場合は、下にカーソルを合わせて回答してください!)

おそらく多くの人にとってあまり役に立たない作業残差が得られます

エクストラクタ関数はこれを認識しており、有用なものを返すか、検索されたコンポーネントのさまざまな側面を抽出するために使用できるようにします。

私が R を教えている人には、アクセスするメソッドやオブジェクトに精通していない限り、R を使うべきではないといつも言って$@ます。

于 2013-07-24T03:13:30.773 に答える