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

Connected

演習

プリミティブなジェネリック関数

R の中核的な機能の一部は、パフォーマンス向上のために C コードへ特別な方法でアクセスする プリミティブ 関数として定義されています。プリミティブ関数の例には、if や for のような言語要素、+ や $ のような演算子、exp や sin のような数学関数があります。プリミティブ関数の中には S3 ジェネリックも含まれており、S3 のプリミティブ・ジェネリックの完全な一覧は .S3PrimitiveGenerics(docs)で確認できます。

S3 ジェネリックがプリミティブな場合、メソッド探索の仕組みが少し異なります。R は通常どおり class(docs)に基づいてメソッドを探しますが、見つからなければ内部の C コード関数が呼び出されます。(通常のジェネリックでは、メソッドが見つからないとエラーになります。)これは、オブジェクトのクラスを上書きしても、長さの計算のような基本的な挙動は壊れないことを意味します。

指示

100 XP

クラスを "hairstylist" に上書きしたリストオブジェクトが、ワークスペースで hair という変数に代入されています。

  • str()(docs)で hair の構造を表示します。
  • R が認識している S3 のプリミティブ・ジェネリックをすべて一覧表示します。
  • exists()(docs)関数を使い、length.hairstylist という関数が存在しないことを確認します。この関数は文字列を入力に取る点に注意してください。
  • 変数 hair の length()(docs)を計算します。