R オブジェクトのデータ型一覧:
基本型、モード型、クラス型
UB3/informatics/r/data_format
このページの最終更新日: 2024/09/30広告
概要: R におけるデータの型
R におけるデータの型は、用語が混乱していて非常にややこしい。文献 4 が最も信頼できそうなので、このページの分類は基本的に文献 4 に従っている。調べ物を続けつつ、現時点での理解をまとめた。大きい分類から順に見ていこう。
ファイルとオブジェクト
Mac に homebrew を使って R をインストールすると、ターミナル 上で R を走らせることができるようになる。getwd() で確認することのできる作業ディレクトリはデフォルトでホームフォルダになっているはずである。
ホームディレクトリには Desktop や Download などのフォルダが格納されている。最初、これらの「普通の」フォルダやファイルが R でどのように見えるのかわからなかった。
R で list.files() を実行すると、作業ディレクトリにある普通のファイルを見ることができる。file.create(a.txt) とすると、a.txt というファイルを作ることができる。つまり、R の側から Mac のファイルを操作することが可能である。
一方、R で扱うデータは
とする。矢印のイメージで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 のオブジェクトは、まず以下の
ベクトル |
ベクトルは、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 などの同等の関数がある。 |
リスト |
リストとは、ベクトル、行列、配列などの |
関数 |
|
language |
|
expression |
|
environment |
|
pairlist |
pairlist 型を直接扱うことは推奨されていないらしい (4)。 |
モード型
モード型とは、
関数
list は異なるデータ型を収納したものなので、list 行の一つがベクトルという状況も可能である。例えば A というリストの V1 がベクトルの場合、mode(A$V1) はちゃんと動き、numeric などの答えを返してくれる。
数値 |
numeric は、さらに 整数 integer と 浮動小数点数型 double に分類される。浮動小数点数型とは、少数を含むデータのことである。 integer と double は numeric の「ストレージモード型」である (4)。ストレージモード型はコンピューターのメモリ上のサイズと対応しており、他のモード型は同じ名前のストレージモード型をもつが、numeric だけは対応するものが integer と double の 2 つである。 is.numeric() 関数で、数値であるかどうか確認できるが、この関数はデータフレームには適用できないので注意。 |
複素数 |
1 と 1 + 0i は区別される。 |
文字列 |
R では " " で囲まれることが多い。 |
理論値 logical |
TRUE または FALSE の値をとる。文字列とは異なるので注意。 |
raw |
サイトによっては、以下のようなデータ型があるといっているものもある。ベクトルの要素として、確かに実数や整数とは異なりそうであるが、おそらくこれらの値が mode() でどのように表示されるのかを基準にすべきだろう。
実際にこれらのデータに出くわしたら更新することにしたい。
- Null: 空っぽのデータ。
- NA: 欠損値
- NaN: Not a number。数でないデータ。
- Inf: Infinite。無限大。
クラス型
オブジェクト A に対して
クラスは、分類というよりも「そのオブジェクトがもつ属性」と理解するのが良いようだ (4)。クラス属性をもたないオブジェクトは、モード型があればモード型、なければ基本型がクラスとして扱われる。
つまり、オブジェクトによって class と mode が別々であったり、class = type であったり、class = mode であったりする場合がある。非常にややこしい。
行列 |
R における 行列は、数学の行列とほぼ同じ概念のようだ (6)。つまり、列と行から成る 2 次元のデータで、全ての要素が同じ単位である必要がある。 行列は、matrix 関数で作成できる。 |
配列 |
|
factor |
|
データフレーム |
各行、各列が必ずラベルをもち、ラベルによる操作が可能である点が普通の行列と異なる (5)。ただし、1 次元のデータはラベルがなくても良さそう。 また、データフレームは、行列とは異なり列ごとに異なる単位をもつことができる (6)。 |
データ型の変換
data.frame から vector
Excel からのコピペでオブジェクトを作成すると、(少なくとも私の環境では) データフレームになる。
統計処理をかけたい場合、経験的にベクトルの方が簡単である。データフレームからベクトルへの変換は、データフレームの取り扱い のページにまとめた。
広告
References
- R Tips データの型. Link.
- R: 変数の型を調べるには. Link: Last access 2018/11/10.
- Rの型について理解する. Link: Last access 2018/11/10.
- Rの型について. Link: Last access 2018/11/10.
- R-Tips 39. データフレーム事始. Link.
- Biostatistics 行列. Link: Last access 2021/10/21.
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。