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

UB3/informatics/r/data_format

このページの最終更新日: 2021/06/18

  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 は、さらに 整数 integerdouble に分類される。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.

コメント欄

各ページのコメント欄を復活させました。スパム対策のため、以下の禁止ワードが含まれるコメントは表示されないように設定しています。レイアウトなどは引き続き改善していきます。「管理人への質問」「フォーラム」へのバナーも引き続きご利用下さい。

禁止ワード: http, the, м (ロシア語のフォントです)


このページにコメント

Name:


Comment:



これまでに投稿されたコメント

Date Name Comment
写真素材無料【写真AC】

新しく写真の提供を始めました。どんどん追加していきますので、上のバナーから登録後に Ultrabem の写真 をご覧下さい。登録と 1 日 9 枚までのダウンロードは無料です。

ダウンロード 1 枚につき約 3 円が私たちに入るので、皆様の懐を全く痛めずに当サイトを支援して頂くことができます。どうぞよろしくお願いします。