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

UB3/informatics/r/data_format

このページの最終更新日: 2024/03/02

  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 などを実行してもオブジェクトを見ることはできない。

オブジェクトを後の解析のためにファイルとして保存しておきたい場合は saveRDS 関数を使い、saveRDS(object, file = "filename.obj") とする。


オブジェクトの基本型 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 関数と同様に基本型を示す仕様になっていると思われる。

list は異なるデータ型を収納したものなので、list 行の一つがベクトルという状況も可能である。例えば A というリストの V1 がベクトルの場合、mode(A$V1) はちゃんと動き、numeric などの答えを返してくれる。


数値
numeric

numeric は、さらに 整数 integer浮動小数点数型 double に分類される。double の良い訳語が見つからないのだが、少数を含むデータということ。

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

is.numeric() 関数で、数値であるかどうか確認できるが、この関数はデータフレームには適用できないので注意。

複素数
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

R における 行列は、数学の行列とほぼ同じ概念のようだ (6)。つまり、列と行から成る 2 次元のデータで、全ての要素が同じ単位である必要がある。

行列は、matrix 関数で作成できる。

配列
array

factor

データフレーム
data.frame

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

また、データフレームは、行列とは異なり列ごとに異なる単位をもつことができる (6)。


データ型の変換

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.
  6. Biostatistics 行列. Link: Last access 2021/10/21.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。