R オブジェクトのデータ型一覧:
基本型、モード型、クラス型

informatics/r/data_format
2018/11/10 更新

  1. 概要: R におけるデータの型
    • ファイルとオブジェクト
    • オブジェクトの基本型: typeof()
    • モード型: mode()
    • クラス: class()
  2. データ型の変換
    • data.frame から vector

広告

概要: R におけるデータの型

R におけるデータの型は、用語が混乱していて非常にややこしい。文献 4 が最も信頼できそうなので、このページの分類は基本的に文献 4 に従っている。調べ物を続けつつ、現時点での理解をまとめた。大きい分類から順に見ていこう。


ファイルとオブジェクト

Machomebrew を使って R をインストールすると、ターミナル 上で R を走らせることができるようになる。getwd() で確認することのできる作業ディレクトリはデフォルトでホームフォルダになっているはずである。

ホームディレクトリには Desktop や Download などのフォルダが格納されている。最初、これらの「普通の」フォルダやファイルが R でどのように見えるのかわからなかった。

R で list.files() を実行すると、作業ディレクトリにある普通のファイルを見ることができる。file.create(a.txt) とすると、a.txt というファイルを作ることができる。つまり、R の側から Mac のファイルを操作することが可能である。

一方、R で扱うデータは オブジェクト と呼ばれる。たとえば、オブジェクト A に 1 から 9 を 1 次元のデータとして入れたい場合には、関数 c を使って

A=c(1,2,3,4,5,6,7,8,9)

とする。 矢印のイメージで A <- c(1,2,3,4,5,6,7,8,9) としても同じ。

> A で A の中身を確認することができ、   [1] 1 2 3 4 5 6 7 8 9 と表示される。[1] は、ベクトルの 1 つめの要素という意味である (1)。

R では ls() でオブジェクトの一覧が見られるものの、ターミナルでその作業ディレクトリに行って ls -al などを実行してもオブジェクトを見ることはできない。


オブジェクトの基本型 basic type

R では、オブジェクトに対して「型」という言葉が使われる。この「型」には次の 3 つの段階があり、これがややこしさの原因である (4)。

R のオブジェクトは、まず以下の 基本型 basic type に分けられる。オブジェクト A に対して typeof(A) で調べることができる。

ベクトル
vector

ベクトルは、R でよく使われる基本型である。なぜならば、次の項で示すように、同じモードのデータは常にその集合体である ベクトル として扱われるためである。

たとえば 1 というデータがあったとき、これは 1 x 1 のベクトルの 1 個目の要素と認識されている。ベクトルの要素の個数をベクトルの長さと呼び、length コマンドで調べることができる。

ただし、vector であるオブジェクト A に対して typeof(A) としても vector とは表示されない。vector であることは自明として、double などと表示される。

オブジェクト A が vector であるか否かを調べたいときには、is.vector(A) とすると TRUE または FALSE が返ってくる。他の基本型に対しても is.list や is.function などの同等の関数がある。

リスト
list

関数
function

language

expression

environment

pairlist

pairlist 型を直接扱うことは推奨されていないらしい (4)。



モード型

モード型とは、基本型がベクトル であるオブジェクトについて、格納されている値の種類を示す型である (4)。例外的に、language 型のオブジェクトの値もモードをもつようである。

関数 mode() で調べることができる。しかし、手持ちのデータで mode を調べると list と表示された。おそらく、ベクトル以外のオブジェクトに対して mode を実行すると typeof 関数と同様に基本型を示す仕様になっていると思われる。

数値
numeric

numeric は、さらに 整数 integer実数 double に分類される。

integer と double は numeric の「ストレージモード型」である (4)。ストレージモード型はコンピューターのメモリ上のサイズと対応しており、他のモード型は同じ名前のストレージモード型をもつが、numeric だけは対応するものが integer と double の 2 つである。

複素数
complex

1 と 1 + 0i は区別される。

文字列
character

R では " " で囲まれることが多い。

理論値 logical

TRUE または FALSE の値をとる。文字列とは異なるので注意。

raw


サイトによっては、以下のようなデータ型があるといっているものもある。ベクトルの要素として、確かに実数や整数とは異なりそうであるが、おそらくこれらの値が mode() でどのように表示されるのかを基準にすべきだろう。

実際にこれらのデータに出くわしたら更新することにしたい。

  • Null: 空っぽのデータ。
  • NA: 欠損値
  • NaN: Not a number。数でないデータ。
  • Inf: Infinite。無限大。

クラス型

オブジェクト A に対して class(A) とすることで調べることができる。

クラスは、分類というよりも「そのオブジェクトがもつ属性」と理解するのが良いようだ (4)。クラス属性をもたないオブジェクトは、モード型があればモード型、なければ基本型がクラスとして扱われる。

つまり、オブジェクトによって class と mode が別々であったり、class = type であったり、class = mode であったりする場合がある。非常にややこしい。

行列
matrix

配列
array

factor

データフレーム
data.frame

各行、各列が必ずラベルをもち、ラベルによる操作が可能である点が普通の行列と異なる (5)。ただし、1 次元のデータはラベルがなくても良さそう。



広告

データ型の変換

data.frame から vector

Excel からのコピペでオブジェクトを作成すると、(少なくとも私の環境では) データフレームになる。

統計処理をかけたい場合、経験的にベクトルの方が簡単である。データフレームからベクトルへの変換は、データフレームの取り扱い のページにまとめた。


広告

コメント欄

フォーラムを作ったので、各ページにあるコメント欄のうち、コメントがついていないものは順次消していきます。今後はフォーラムをご利用下さい。管理人に直接質問したい場合は、下のバナーからブログへ移動してコメントをお願いします。


References

  1. R Tips データの型. Link.
  2. R: 変数の型を調べるには. Link: Last access 2018/11/10.
  3. Rの型について理解する. Link: Last access 2018/11/10.
  4. Rの型について. Link: Last access 2018/11/10.
  5. R-Tips 39. データフレーム事始. Link.