Rにおいてデータは様々なデータ型の階層構造になっており、データ値はその構造の中に保存されます。今回は、Rで広く使われているデータ型やデータ構造をまとめており、今後はそれを可視化、つまりプロットする方法を紹介します。
Rの基本要素:変数と代入
Rのインターフェースは計算機としても使えます。
(2 + 3)のように簡単な算術計算をコンソールに打ち込むと答えを返してくれます。
Rの出力結果は[1] ***となっています。
# 算術計算
(2 + 3)
[1] 5
R通常、値は変数に代入した方が使い勝手が良く、変数に変更を加えて追加操作も可能です。
# 単純な代入
x <- 9
y <- 7
# 変数は計算に使えます。
x + y
[1] 16
# 計算の結果を新たな変数に代入できます。
z <- x + y
z
[1] 16
# その結果を関数に引き渡すこともできます。
sqrt(z)
[1] 4
RRでの代入の基本は、値のベクトルの代入です。ベクトルは、上記コードのx, y, zのような単一の値や、
複数の値を1つのベクトルにc(3, 4, …)とできます。下記例では、値のベクトルをtree.heightsという変数に代入しました。1つの変数でベクトル全体を示すことができます。
# ベクトルの代入の例
tree.heights <- c(4.3, 2.5, 7.5, 3.3, 4.9)
tree.heights
[1] 4.3 2.5 7.5 3.3 4.9
RRでは、大文字と小文字は区別される。つまり、tree.heightsとTree.HeightsとTREE.HEIGHTSは全て別の整数を示しています。大文字と小文字を正しくタイプしているか注意が必要です。間違っている場合はエラーが発生します。
様々な演算子や関数
# tree.heightsの二乗
tree.heights**2
[1] 18.49 6.25 56.25 10.89 24.01
# 結果、ベクトルの各要素が二乗されます。
# tree.heightsの合計値
sum(tree.heights)
[1] 22.5
# tree.heightsの平均値
mean(tree.heights)
[1] 4.5
# 結果をさらに別の変数に代入
max.height <- max(tree.heights)
max.height
[1] 7.5
R複数の要素を持つデータ構造の利点の一つは、そのサブセットを自在に取り出せることです。
単一の要素や要素の一部分だけを取り出して操作できます。
tree.heights
[1] 4.3 2.5 7.5 3.3 4.9
# 1番目の要素
tree.heights[1]
[1] 4.3
# 1番目から3番目の要素
tree.heights[1:3]
[1] 4.3 2.5 7.5
# 1番目から3番目の要素の平方根
sqrt(tree.heights[1:3])
[1] 2.073644 1.581139 2.738613
# 5, 3, 1番目の要素
tree.heights[c(5, 3, 1)]
[1] 4.9 7.5 4.3
R文字列や論理値の代入
# 文字列の代入
name <- "Steve Jobs"
name
[1] "Steve Jobs"
# 文字列のベクトル代入
apple <- c("iPhone", "iMac", "iPod", "iPad", "Airpods")
apple
[1] "iPhone" "iMac" "iPod" "iPad" "Airpods"
# 文字列や配列の要素数
length(apple)
[1] 5
# 論理値の代入
products <- c(TRUE, TRUE, TRUE, TRUE, FALSE)
products
[1] TRUE TRUE TRUE TRUE FALSE
# 論理値型ベクトルは別のベクトルのサブセットを取るのに使えます。
apple[products]
[1] "iPhone" "iMac" "iPod" "iPad"
Rデータ型
Rにおけるデータは、様々なデータ型の階層構造になっており、データの値はその構造の中に保持されます。各型には型チェック用の関数と変換用の関数が存在します。
最も基本的な型とその型チェック関数、変換関数を以下の表に示します。
型 | 型チェック関数 | 変換関数 |
---|---|---|
numeric(数値型) | is.numeric() | as.numeric() |
character(文字列型) | is.character() | as.character() |
logical(論理値型) | is.logical() | as.logical() |
list(リスト型) | is.list() | as.list() |
integer(整数値型) | is. integer() | as.integer() |
double(倍精度浮動小数点型) | is.double() | as.double() |
complex(複素数型) | is.complex() | as.complex() |
function(関数型) | is.function() | as.function() |
raw(バイト型) | is.raw() | as.raw() |
本サイトでは、以下の3つのデータ型を見ていきます。
1. 数値型:numeric
2. 文字列型:character
3. 論理値型:logical
数値型
数値型の変数には数が入ります。numeric()を使うと、全ての要素が0のベクトルを指定した長さでつくることができます。as.numeric()は引数を数値型に変換します。as.doubleやas.realも同様です。
is.numericは引数が数理型であるかを判定して、結果をTRUEかFALSEかで返します。
numeric(8)
[1] 0 0 0 0 0 0 0 0
# 引数を数値型に変換すると、テキストは暗黙的に強制変換。
as.numeric(c("2000", "-20", "Earth"))
[1] 2000 -20 NA
Warning message:
NAs introduced by coercion # coercion:強制
# 論理値型の引数を数値型に変換。
as.numeric(c(FALSE, TRUE))
[1] 0 1
# 引数が数値型であるか判定し、TRUEかFALSEで返す。
is.numeric(c(8, 8))
[1] TRUE
# 端的にベクトルが文字列型なので、FALSEが返っている。
is.numeric(c(8, 8, 8, "8"))
[1] FALSE
R文字列型
文字列型の変数にはテキストが入ります。character()は指定した長さのベクトルをつくります。ベクトルの各要素は” “、つまり空文字列になっています。as.character()は引数を文字列型に変換します。その際、ベクトルの要素名といった属性は全て取り除かれます。is.character()は渡した引数が文字列型かどうかを判定し、その結果をTRUEかFALSEで返します。
character(8)
[1] "" "" "" "" "" "" "" ""
# 変換
as.character(8)
[1] "8"
# 型チェック
is.character(8)
[1] FALSE
# 型チェック
is.character("8")
[1] TRUE
R論理値型
logical()を使うと、全ての要素がFALSEのベクトルを指定した長さでつくることができます。as.logical()は、引数を論理値型に変換します。その際、ベクトルの要素名といった属性は全て取り除かれます。c(“T”, “TRUE”, “True”, “true”)といった文字列や0以外のあらゆる数値は真(TRUE)と見なされます。
同様に、c(“F”, “FALSE”, “False”, “false”)といった文字列や0は偽(FALSE)と見なされます。それ以外は、NAと見なされます。is.logicalは引数が論理値型かどうかをTRUEかFALSEで返します。
logical(5)
[1] FALSE FALSE FALSE FALSE FALSE
# 変換
as.logical(c(10, 5, 0, -5, -10))
[1] TRUE TRUE FALSE TRUE TRUE
# TRUEは1に、FALSEは0に変換。
as.logical(c(10, 5, 0, -5, -10)) * 1
[1] 1 1 0 1 1
as.logical(c(10, 5, 0, -5, -10)) + 0
[1] 1 1 0 1 1
# c()に文字列型と数値型が与えられると文字列型に変換される。
as.logical(c("True", "T", "FALSE", "Raspberry", "9", "0", 0))
[1] TRUE TRUE FALSE NA NA NA NA
# 文字列の"0"がas.logical()には論理値の表象と見なされない。
R論理値型ベクトルは、データのサブセットを取るのに使えるため、データからある基準を満たす要素だけを取り出すという場合に便利です。空間分析においては、データベースから条件に合致するレコードだけを取り出す際にこのテクニックを使います。
data <- c(2, 5, 10, 50, 80, 25, -93)
# 論理値を返すテスト
index <- (data > 10)
index
[1] FALSE FALSE FALSE TRUE TRUE TRUE FALSE
# データのサブセットを取るためにindexを使う。
data[index]
[1] 50 80 25
sum(data)
[1] 79
sum(data[index])
[1] 155
Rこれらのデータ型は、様々なデータ構造やクラスの中に入れることができます。
例えば、ベクトルや行列、データフレーム、リスト、因子型です。各データ型の詳細についてこれから紹介していく予定です。