1.1 データ構造(1)ベクトル

Rにおける最もシンプルなデータ構造がベクトルです。ベクトルは1つ以上のデータを格納できる入れ物だと考えてください。Rにおいては、単一の数値であっても、大きさ1のベクトルとして扱われます。例えば、以下のような演算を実行した結果の数値も大きさ1のベクトルです。結果に表示される[1]はそのすぐ右にある数値がベクトルの1番目の要素であることを示しています。

3+4
## [1] 7
sqrt(9)
## [1] 3
sin(pi/6)
## [1] 0.5

多くの要素を持つベクトルの場合、例えば正規乱数を12個生成した結果のベクトルは以下のように表示されます。

rnorm(12)
##  [1] -0.8923113  0.7423364 -0.3892974 -0.2012510  0.3710262  0.9221300
##  [7]  0.0240052 -0.3729461 -1.1661646 -1.3248501 -0.8415518  0.2662685

含まれるすべての要素が同じデータ型であるようなベクトルを特にアトミックベクトルと呼びます。アトミックベクトルに対してtypeof()関数を適用すると、データ型を確認することができます。

typeof(3)
## [1] "double"
typeof(sqrt(9))
## [1] "double"
typeof(rnorm(12))
## [1] "double"

1.1.1 オブジェクトと変数

Rのコンソールにコマンドを入力すると、Rは何らかの結果をベクトルなどの形で出力してくれます。これらを総称してオブジェクト(object)と呼びます。上のようなコマンドでは出力された結果のオブジェクトは再利用できませんが、変数(variable)に代入することで、再利用することができます。例えば、

x <- rnorm(12)

とすると、実行結果には何も表示されませんが、変数xの中に実行結果が格納されます。<-(代入演算子と呼びます)は、左辺の変数に右辺の実行結果を代入しなさいという意味になります。つまり、xrnorm(12)の結果のオブジェクトが格納されたということになります。xの中に何が入っているかを知りたい場合は、コンソールにxと入力します。

x
##  [1]  2.09549721  0.94397217  1.65650906  1.21910470  0.79306881 -0.63132826
##  [7]  0.04050567  2.03899777  0.17177980  1.13423153  0.12337541 -0.76196164

変数名には、文字、数字、ピリオドなどの記号が利用できますが先頭に数字がつくものは使えません。また、大文字と小文字を区別しますので、注意しましょう。実際に分析するときは、分析者にとって分かりやすく、また複数の分析者で分析する場合は他の人が見てもある程度推測できるような変数名にするとよいです。

student_id <- 1200

任意のベクトルを作成する場合は、c()関数1を用います。

x <- c(3, 6, 10)
x
## [1]  3  6 10
y <- c(sin(pi/6), sqrt(9))
y
## [1] 0.5 3.0

1.1.2 便利なベクトル作成法

規則的に並んだ数値を要素とするベクトルを作成するには、いくつかの便利な方法があります。

# 1ずつ増加する数列
1:10
##  [1]  1  2  3  4  5  6  7  8  9 10
# 同じ数値の繰り返し
rep(10, 5)
## [1] 10 10 10 10 10
# 増分を指定した数列(任意の公差をもつ等差数列)
seq(1, 2, 0.1)
##  [1] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0

1.1.3 ベクトルの演算

ベクトル同士の演算は、2つのベクトルの大きさが同じ場合には要素同士の演算結果がベクトルとして返されます。

x <- c(3, 6, 10)
y <- c(3, 2, 5)
x + y
## [1]  6  8 15
x - y
## [1] 0 4 5
x * y
## [1]  9 12 50
x / y
## [1] 1 3 2

2つのベクトルの大きさが異なる場合には、小さい方のベクトルの要素が、大きい方と同じ大きさになるまで「リサイクル」されます。以下のコマンドはx^c(2, 2, 2)と同じであると理解しましょう。

x^2
## [1]   9  36 100

以下のように、大きい方のベクトルの大きさが、小さい方の大きさの定数倍でない場合には警告が出力されます。

z <- c(1, 2)
x * z
## Warning in x * z: 長いオブジェクトの長さが短いオブジェクトの長さの倍数になってい
## ません
## [1]  3 12 10

1.1.4 ベクトルの要素の参照

ベクトルの要素を参照する場合は、[]を以下のように使います。

x[2]
## [1] 6
x[2:3]
## [1]  6 10
x[c(1, 3)]
## [1]  3 10

1.1.5 ベクトルに対する便利な関数

複数の処理をまとめたものを関数(function)といいます。関数にはRに元々組み込まれているものもありますし、自分で関数を作ることもできます。関数は 関数名() の形式で呼び出すことができ、()内にオブジェクトを記述することで、関数はそのオブジェクトに対して定められた処理を実行します。()内に記述するオブジェクトを引数(ひきすう)と呼びます。

ベクトルに対しては、以下のような関数がよく用いられます。

# ベクトルの大きさ(要素数)を出力する
length(x)
## [1] 3
# 数値ベクトルの合計を出力する
sum(x)
## [1] 19
# 数値ベクトルの平均を出力する
mean(x)
## [1] 6.333333
# 数値ベクトルの標準偏差(standard deviation)を出力する
sd(x)
## [1] 3.511885

1.1.6 ベクトルの属性

すべてのオブジェクトには属性(attribute)を付与することができます。

a <- c(3, 4, 10)
attr(a, "owner") <- "nonki1974"
attr(a, "owner")
## [1] "nonki1974"

  1. cはcombineのcを意味している↩︎