1. 学ぶ
  2. /
  3. コース
  4. /
  5. R における S3 と R6 を使ったオブジェクト指向プログラミング

Connected

演習

S3メソッドを作成する(2)

あるジェネリックに対して適切なメソッドが見つからない場合、エラーが発生します。たとえば、現時点では get_n_elements() には data.frame 用のメソッドしかありません。代わりに行列を get_n_elements() に渡すと、次のようなエラーになります。

> get_n_elements(matrix())
Error: no applicable method for 'get_n_elements' applied to an object of class "c('matrix', 'array', 'logical')"

あらゆる入力型に対して個別のメソッドを何十個も書く代わりに、特定のメソッドがない型すべてを処理するメソッドを作成できます。これは「デフォルト」メソッドと呼ばれ、常に generic.default という名前になります。たとえば、print.default()(docs)は、独自の print()(docs)メソッドを持たない任意の型のオブジェクトを出力します。

指示

100 XP

ワークスペースには、ジェネリック関数 get_n_elements() と data.frame 用のメソッドが定義されています。

  • ls.str()(docs)を使ってワークスペースを確認してください。
  • get_n_elements() の S3 デフォルトメソッドを書いてください。
    • 関数名は、ジェネリック名に . を挟んで default を続けたものにします。
    • 入力引数は x と ... にします。
    • 関数本体は1行にし、任意のオブジェクトの要素数を返してください。演習「Make it Classy (1)」でチェスゲームに使ったのと同じ手法を用いましょう。
  • ability.cov(docs)データセットにこのメソッドを適用し、結果を変数 n_elements_ability.cov に代入してください。