R の「型」について

R について話をしていると「型」について認識に差があったりすることが多いので,ここで簡単にまとめておく.

R におけるデータ型

R において「型」という言葉は,次の3つの異なるものに対して共通して使われる.

  • 基本型
  • モード型
  • クラス

基本型 (Basic type)

  • 基本型は簡単に言って,ファーストクラスオブジェクトの型である.すなわち,この型のオブジェクトはリテラルで表現可能で,変数に格納することができ,関数の引数や戻り値になることができる.
  • R の基本型は,ベクトル型,リスト型,関数型,language 型,expression 型, environment 型,pairlist 型である.
  • 基本型の判定には,型ごとに用意された is.xxx 関数を用いる.

Remarks

  • 基本型のオブジェクトは属性 (attributes) を持てる.
  • NULL は基本型を持たない唯一のファーストクラスオブジェクトである.歴史的には NULL は pairlist 型だったため,引数を持たない pairlist() は NULL を返す.
  • … は pairlist 型である.
  • pairlist 型を直接扱うことは推奨されていない (deprecated) .

モード型 (mode)

  • モード型は,基本型がベクトル型であるオブジェクトに対して,格納される値の種類を表す型である.例外的に,language 型にもモードが存在する.
  • R の(ベクトル型に対する)モード型は,logical, numeric, complex, character, raw である.
  • モード型の判定には mode 関数を用いる.

Remarks

  • モード型に対して,メモリ上のサイズと対応したストレージモード型が存在する.モード型 numeric に対してはストレージモード型 integer, double がある.他のモード型はそれぞれ同名単一のストレージモード型となる.

クラス (class)

  • クラスは,オブジェクトの属性によって表される型である.クラスのオブジェクトとは,一般的には class 属性のついたリスト型オブジェクトである.
  • R においては,たとえば matrix, array, factor, data.frame などがこれにあたる.
  • クラスの判定には class 関数を用いる.

Remarks

  • class 属性を持たないオブジェクトは,モード型があればモード型,なければ基本型がクラスとして使われる.
  • matrix, array は class 属性を持たないが独自のクラス名を持つ特殊なクラスである.matrix クラスは dim 属性に長さ 2 のベクトルを持つオブジェクトに与えられ,array クラスはそれ以外の dim を持つオブジェクトに与えられる.
  • クラス型は属性が指定できるかどうかを除いて基本型に依存しない.たとえば,基本型がベクトル型であるような matrix クラスのオブジェクトも作れるし,基本型がリスト型であるような matrix クラスのオブジェクトも作れる.
  • 基本型・モード型の変更はハードコピーが発生するが,クラスは class 属性の値を置き換えるだけなので,基本的にコピーは発生しない.

R の「型」について」への1件のフィードバック

  1. ピンバック: Rのデータ型 | Munetsugu Kota

コメントを残す

メールアドレスが公開されることはありません。