要素の取得・部分ベクトルの抽出
単一要素の取得
ベクトルの要素は[]で添字を指定して参照
- 先頭要素は(0番目ではなく)1番目
- 要素数より大きい数を指定した場合はNAが返される
- 0を指定した場合はnumeric(0)~0を0個並べたベクトルが返される
1 2 3 4 5 6 7 8 9 10 11 |
> x <- c(11, 12, 13, 14, 15) > x[1] [1] 11 > x[2] [1] 12 > x[5] [1] 15 > x[6] [1] NA > x[0] numeric(0) |
複数要素からなるベクトルを抽出
複数の要素をベクトル化して指定した場合は、それらの位置の要素からなるベクトルが返される。返り値のベクトルの要素の順番は引数のベクトルで指定した順番になる。
1 2 3 |
> x <- c(11, 12, 13, 14, 15) > x[c(5, 3, 1)] [1] 15 13 11 |
要素を除外したベクトルを取得
負の数を指定した場合は、その絶対値の位置の要素を除いたベクトルが返される。
- 複数の要素を除外したい場合は、除外したい位置の添字をベクトル化して指定
- 除外要素の指定は順不同
- 返り値のベクトルの要素の順番は元のベクトルに準ずる
- 負数を使う場合は正数は混在できない
- 0は使えるが意味を持たない
1 2 3 4 5 6 7 8 |
> x[-1] [1] 12 13 14 15 > x[c(-4, -2)] [1] 11 13 15 > x[c(2, -4)] x[c(2, -4)] でエラー: 負の添字と混在できるのは 0 という添字だけです > x[c(0, -4)] [1] 11 12 13 15 |
条件を指定した要素・ベクトルの抽出
要素の代わりに条件式を指定すると、その条件に合った要素からなるベクトルが返される。
条件式を変数として書くこともできて、
- 条件を満たす要素位置がTRUE、満たさない要素位置がFALSEという要素からなるベクトルが返される
- そのベクトルを元のベクトルの引数として指定すると、TRUEの位置の要素からなるベクトルが返される
1 2 3 4 5 6 7 8 |
> x <- c(-3, -2, -1, 0, 1, 2, 3) > x[x >= 0] [1] 0 1 2 3 > condition <- (x < 0) > condition [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE > x[condition] [1] -3 -2 -1 |
要素の追加・ベクトルの結合
既存のベクトルの長さ以上の要素を指定して値を代入すると、ベクトルが拡張されて値が代入される。
間が空いていればNA
が代入される。
1 2 3 4 5 6 7 8 9 10 |
> a <- c(1) > a [1] 1 > a[2] <- 4 > a[3] <- 9 > a [1] 1 4 9 > a[6] <- 36 > a [1] 1 4 9 NA NA 36 |
c()
関数の中でベクトルと要素を列記して結合できる。複数の要素とベクトルを混在させることが可能。
1 2 3 4 |
> x <- c(-4, -3, -2) > y <- c(2, 3, 4) > c(-6, -5, x, -1, 0, 1, y, 5, 6) [1] -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 |
append(v1, v2, after=n)
関数は、v1のn番目の要素の後ろにv2を挿入。
1 2 3 4 5 6 |
> x <- c(1, 2, 3, 4, 5) > y <- c(-1, -2, -3) > append(x, y) [1] 1 2 3 4 5 -1 -2 -3 > append(x, y, after=3) [1] 1 2 3 -1 -2 -3 4 5 |
また、以下のように現在の要素数 + 1の要素に値をセットすると要素が追加される。
1 2 3 4 5 |
> (a <- c(1, 2, 3)) [1] 1 2 3 > a[length(a)+1] <- 4 > a [1] 1 2 3 4 |
要素・ベクトルの置換
replace()
関数で指定位置の要素を指定した要素で置き換える。
- 複数要素を置き換える場合は、指定位置と置き換え要素をベクトルで指定
- 指定位置の数と置き換え要素の数が等しいこと
- 指定位置の要素をベクトルで置き換えることはできない模様
1 2 3 4 5 6 7 8 9 10 |
> x <- c(10, 20, 30, 40, 50) > replace(x, 3, 99) [1] 10 20 99 40 50 > replace(x, c(2, 4), c(22, 44)) [1] 10 22 30 44 50 > replace(x, 3, c(-1, -2)) [1] 10 20 -1 40 50 警告メッセージ: replace(x, 3, c(-1, -2)) で: 置き換えるべき項目数が、置き換える数の倍数ではありませんでした |
条件を指定して、その条件を満足する要素のみ置換することも可能。
1 2 3 |
> x <- c(-2, -1, 0, 1, 2) > replace(x, (x<0), -9) [1] -9 -9 0 1 2 |