始める無料で始める

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

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

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

この演習はコースの一部です

R における S3 と R6 を使ったオブジェクト指向プログラミング

コースを見る

演習の手順

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

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

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# View the structure of hair
___

# What primitive generics are available?
___

# Does length.hairstylist exist?
___

# What is the length of hair?
___
コードを編集して実行