ベクトルの作成
ベクトルを作成する基本的な関数は c() である.
c(1.0, 2.0, 3.0, 4.0, 5.0) # 長さ 5 のベクトルを作成する [1] 1 2 3 4 5 |
ベクトル要素へのアクセス
ベクトルの中の数を「要素」と呼び,各要素には左から順に 1, 2, ・・・ と番号が振られている.以下ではベクトル x について要素にアクセスする方法を一覧表で示している.
コマンド |
機能 |
x[k] |
k 番目の要素を取り出す.要素番号として 0 を指定すると,長さ 0 で元のベクトルと同じ型のベクトルが返る. |
x[k] <- a |
k 番目の要素を a に変更. |
x[正整数ベクトル] |
いくつかの要素をまとめて取り出す. |
x[負整数ベクトル] |
対応する要素番号の要素を取り除く. |
x[論理値ベクトル] |
TRUE の要素に対応した要素を取り出す. |
x[条件式] |
条件に合致した要素を取り出す. |
x[文字型ベクトル] |
要素ラベルを指定して要素を取り出す(names 属性が付いている場合). |
以下に簡単な例を示す.
x <- c(1, 2, 3, 4, 5) x[3] # 3 番目の要素を取り出す [1] 3 x[5] <- 0 # 5 番目の要素を 0 に変更する x # x の値を確認する [1] 1 2 3 4 0 |
ベクトル同士の計算
同じ長さ同士のベクトルの演算 (算術演算,論理演算,比較演算) は,対応する各要素の演算となる.すなわち,普通の数字と同様に + (加算),- (減算), * (積), / (商), %/% (整数商),%% (剰余),^ (べき乗) が行える.
c(1, 2, 3) + c(4, 5, 6) # c(1+4, 2+5, 3+6) [1] 5 7 9 c(1.0, 2.0) * c(3.0, 4.0) # c(1*3, 2*4) [1] 3 8 |
ベクトルの長さが違う場合は短い方のベクトルの要素が循環して使用される.このことを利用して,ベクトルの全ての要素に同じ処理を施すことも出来る(以下に例示する).
c(6.0, 5.0, 4.0, 3.0) - c(2.0, 1.0) # c(6-2, 5-1, 4-2, 3-1) と同じ [1] 4 4 2 2 c(1.0, 2.0, 3.0, 4.0, 5.0) - 1 # 全ての要素から 1 を引く [1] 0 1 2 3 4 |
ベクトル同士を比較演算子 < ,== ,> などによって比較することも出来る.算術演算の場合と同様,これらの演算子はベクトルとベクトルの対応する要素同士を比較して,後述する論理型ベクトルを結果として返すことになる.
c(1, 20, 300, 4, 50) == c(1, 2, 3, 4, 5) # 1 == 1, 20 == 2, 30 == 3 ... [1] TRUE FALSE FALSE TRUE FALSE c(1, 20, 300, 4, 50) > 60 # 1 > 60, 20 > 60, 300 > 60 ... [1] FALSE FALSE TRUE FALSE FALSE |
数学関数をベクトルに適用すれば,各要素毎に関数が適用されて結果が表示される.
sqrt(1:5) [1] 1.000000 1.414214 1.732051 2.000000 2.236068 |
また,数値を要素に持つベクトルの各要素に対して演算を行なう関数には以下のようなものがある. また,関数 (sqrt() や cos() など) を適用することで,項別に関数を適用することも出来る. ただし,ベクトルの要素に一つでも NA があると結果も NA になるものもあるので注意しなければならない.
記号 |
sum() |
mean() |
var() |
median() |
cor() |
max() |
min() |
意味 |
総和 |
平均 |
不偏分散 |
中央値 |
相関係数 |
最大値 |
最小値 |
|
|||||||
記号 |
prod() |
cumsum() |
sd() |
sort() |
rev() |
pmax() |
pmin() |
意味 |
総積 |
累積和 |
標準偏差 |
昇順整列 |
要素を逆順 |
並列最大値 |
並列最小値 |
|
|||||||
記号 |
range() |
match() |
diff() |
rank() |
order() |
||
意味 |
範囲 |
マッチング |
前進差分 |
整列した各要素の順位 |
整列した各要素の元の位置 |
まず,一つのベクトルを使った計算例を示す.
x <- 1:5 rev(x) # x の要素を逆順にする [1] 5 4 3 2 1 y <- cumsum(x) # y に x の累積和を代入 mean(y) # y の平均を求める [1] 7 mean(y, 0.5) # y の小さい方と大きい方を合わせて 100*0.5%=50% を除いた平均(trimmed mean) [1] 6 |
次に,複数のベクトルを使った計算例を示す.
y <- c(0, 1, 3, 6, 10); sort(y) # y を整列する [1] 0 1 3 6 10 order(y) # y を整列したときの各要素の元の位置 [1] 1 2 3 4 5 rank(y) # y を整列したときの各要素の順位 [1] 1 2 3 4 5 z <- c(100, 20, 4, 2, 1) pmax(x, y, z) # x, y, z の各要素を比較して一番大きいものを順に返す [1] 100 20 4 6 10 pmin(x, y, z) # x, y, z の各要素を比較して一番小さいものを順に返す [1] 0 1 3 2 1 |
ベクトルを用いた集合演算
ベクトルを集合と見立てて集合演算を行うことも出来る.まず,集合演算用の関数を紹介する.
コマンド |
説明 |
union(x, y) |
和集合 |
intersect(x, y) |
積集合 |
setdiff(x, y) |
差集合 |
setequal(x, y) |
集合として等しいか否か |
is.element(x, y) |
x 中の各要素は集合 y に含まれるか否か( x %in% y でも可) |
次に,計算例を示す.
x <- 1:5; y <- 1:4 intersect(x, y) # 積集合 [1] 1 2 3 4 setequal(x, y) # 集合として等しいか否か [1] FALSE is.element(x, y) # x 中の各要素は集合 y に含まれるか否か [1] TRUE TRUE TRUE TRUE FALSE |
names 属性と要素のラベル
ベクトルには names 属性と呼ばれる属性情報を付けることが出来,要素の名前を持つベクトルは名前を使って要素を取り出すことが出来る.
mydata の各要素の名前が myname の各文字列に入っている.mydata に name 属性を付け加えるには以下のようにする.ただし names 属性の値はベクトルと同じ長さの文字型ベクトルでなければならない.
mydata <- c(57, 173, 19) # 体重,身長,BMI のデータ myname <- c("weight", "height", "BMI") # 名前 names(mydata) <- myname # 名付ける mydata # mydata に名前が付いた weight height BMI 57 173 19 |
names 属性を付ける事で,ベクトルに名前でアクセスすることが出来る.
mydata["BMI"] BMI 19 mydata["BMI"][[1]] [1] 19 |
ベクトルと同じようにリストも names 属性を持つことが出来る.names 属性の意味付けもベクトルの場合と同じで,リストの要素の名前として扱われる.
x <- list(57, "173", c(1,9,0,4,5,0,7)) # 体重,身長,BMI のデータ names(x) <- c("weight", "height", "BMI") # 名前を名付ける x $weight [1] 57 $height [1] "173" $BMI [1] 1 9 0 4 5 0 7 x$weight # 名前でアクセス( x[["weight"]] でも可) [1] 57 |
Back to R