13. ベクトル要素へのアクセス


ベクトルの中身

例えば x というベクトルを定義したければ以下のようにすればよい.

 
 x <- c(1,2) 

本当に x にベクトル (1, 2) が入っているかを確かめてみる.

 
 x

[1] 1 2 

丸括弧 ( を用いると代入と表示を同時に行なうことは既に扱ったが,以下のような場面でも同じ働きをする.

 
 x <- c(1, 2)                     # 代入のみで結果の表示はない
 (x <- c(1, 2))                   # 丸括弧で囲むと、代入した結果を表示

[1] 1 2

 f <- function(x) y <- 2*x
 f( c(1, 2) )                     # 何も表示されない
 f <- function(x) (y <- 2*x)
 f( c(1, 2) )                     # 丸括弧で囲むと代入した上で表示される

[1] 2 4

ベクトル要素へのアクセス

ベクトルの中の数を「要素」と呼び,各要素には左から順に 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

Mathematica や Maple などの数式処理ソフトでは,負値のベクトルを指定した場合の動作が R と異なるので注意.

次に,多少込み入った例を示す.

 
 x <- c(1, 2, 3, 4, 5)
 x[2:5]                           # 2 番目〜 5 番目の要素を取り出す

[1] 2 3 4 5

 x[c(-1,-3)]                      # 1 番目と 3 番目以外の要素を取り出す

[1] 2 4 5

 x[30 < x]                        # 30 より大きい要素のみを取り出す

[1] 40 50

 x[10 < x & x < 40]               # 2 つの条件は & や | で繋ぐ

[1] 20 30

 (1:length(x))[10 < x & x < 40]   # 何番目の要素が条件を満たしているか

[1] 2 3

[ と ] の間のベクトルの長さが元のベクトルの長さよりも小さければ巡回的に評価が繰り返され,ベクトルの長さが長すぎるときはその部分の評価結果には NA が出力される.ただし,正値と負値が混在したベクトルは指定出来ない.

関数 which() を用いることで,ベクトルからある値に最も近い要素の番号を求めることが出来る.また,ベクトルの最大・最小要素の位置を求める関数として which.max(), which.min() が用意されている.

 
 x <- 1:10
 num <- which( abs(x-5.2) == min(abs(x-5.2)) )   # 5.2 に最も近い値を持つ要素の番号
 x[num]                                          # 該当する要素の値

[1] 5