名前に込められた意味は?
S3 では厳格な命名規則を用います。すべての S3 メソッドは generic.class という形式の名前になります。
逆は成り立ちません。ドットを含む名前でも、S3 メソッドではない関数があります。これは S 言語の初期からある多くの関数に当てはまります。たとえば、all.equal()(docs)は実際にはメソッドではなく S3 のジェネリックです。(これは leopard.case が紛らわしい例です。)
関数が S3 のジェネリックかどうかは、pryr パッケージの is_s3_generic()(docs)を呼び出して確認できます。コンソールで関数名をそのまま入力して中身を表示し、UseMethod() を呼んでいるかどうかを確認する方法もあります。
同様に、関数が S3 メソッドかどうかは、pryr の is_s3_method()(docs)で確認できます。例えば、
library(pryr)
is_s3_generic("t") # 転置のジェネリック関数
is_s3_method("t.data.frame") # data.frame 用の転置メソッド
is_s3_method("t.test") # スチューデントの t 検定用の関数
どの記述が正しいでしょうか?
この演習はコースの一部です
