Rはベクトルをベースとした言語です。
ベクトルといっても物理で習う、あの矢印(→)というよりも、「数字のリストのようなもの」と捉えるのが分かりやすいと以前に解説しましたね。
Numericベクトル
今回、まずNumericベクトルについて説明します。
英語のNumericとは数値という意味です。
つまり、Numericベクトルは数字を扱うベクトルです。
例えば、「ヒロ」と「ケン」といバスケットボール選手の各試合の得点を
point.hiro <- c(14, 8, 4, 6, 6, 2)
point.ken <- c(8, 4, 2, 9, 10, 9)
と、入力します。
では、このベクトルがNumericベクトルかどうかを確認するために、str( )関数を使います。
例えば、point.hiroなら、
str(point.hiro)
num [1:6] 14 8 4 6 6 2
となり、point.hiroベクトルは、
- num=Numericベクトル
- [1:6]=1次元配列→※もし2次元なら[1:6, 1:5]みたいになります
- 要素=14, 8, 4, 6, 6, 2
であるということが分かります。
他にもNumericベクトルかどうかを確認する方法として、is.numeric( )関数があります。
is.numeric(point.ken)
[1] TRUE
TRUEならNumericベクトル、FALSEならNumericベクトル以外のベクトルタイプであることを意味します。
この場合、TRUEですから、point.kenはNumericベクトルであることが分かります。
Numericベクトルで使うRの計算演算子(Arithmetic Operator)
Numericベクトルの概要は掴めた思うので、Rで使える基本的な計算演算子について解説します。
ちなみに、足し・引き・割り・掛け算(+、ー、*、/)は大丈夫ですよね。
その他にも以下のような演算子があります。
演算子 | 意味 | 例 |
^ | べき乗 | 2^3 = 6 |
%% | 割り算の余りのみ | 7 %% 2 = 1 |
%/% | 割り算の商のみ | 7%/% 2 = 3 |
abs(x) | 絶対値 | abs(-1) = 1 |
log(x, base = y) | 対数 | log(4, base = 2) = 2 |
exp(x) | 指数関数(e^x) | exp(1) = 2.718282 |
sqrt(x) | 平方根 | sqrt(4) = 2 |
factorial(x) | 階乗 | factorial(3) = 3!=6 |
choose(x, y) | 組み合わせ(xCy) | choose(5, 3) = 10 |
という演算子があります。
特に注意が必要なのは、logです。
Rでは、logの底(base=y)を指定しないとネイピア数(e)を底とする自然対数を取ります。
例えば、xにlog(1), log(2), log(3)を代入してみると、
x <- log(1:3)
x
[1] 0.0000000 0.6931472 1.0986123
となり、log e 1, log e 2, log e 3を計算しています。
確認の為に、exp( )関数にこのxを代入すると
exp(x)
[1] 1 2 3
となります。つまり、log( )とexp( )は逆関数の関係にあることも証明できましたね。
また、logの底が2、10の場合は特別に、
log2( )
log10( )
の関数を使うこともできます。
数値ベクトルの四捨五入
Rには数字を四捨五入したり、切り捨て、切り上げなどを関数で簡単にできます。
まずはround関数です。
round( )は、( )内のdigitsオプションを使って小数点何桁で四捨五入するか指定できる
round(3.1415, digits = 2)
[1] 3.14
次に、signif関数では、signif( )内の digitsオプションで指定した有効桁数で四捨五入します。
signif(3.1415, digits = 2)
[1] 3.1
連続的な数値ベクトルを作成
数字の間にコロン(:)を入れると連続的な数値を作ることができます。
例えば、
> 1:3
[1] 1 2 3
他にも、seq関数でも連続的な数値ベクトルを作成できます。seq( )内のseq(from, to, by, length.out)を使うことで、コロンよりも複雑な連続する数字を作ることができます。
from | 始まりの数値 |
to | 終わりの数値 |
by | 間隔 |
length.out | 数値を等分する数 |
例えば、
seq(from = 1, to = 5)
[1] 1 2 3 4 5
seq(from = 1, to = 10, by = 2)
[1] 1 3 5 7 9
seq(from = 1, to = 9, length.out = 3)
[1] 1 5 9
数値を結合する
c( )を使ってベクトルを結合できます。
と問えば、ヒロとケンのスコアを結合する場合、
point.all <- c(point.hiro, point.ken)
point.all
[1] 14 8 4 6 6 2 8 4 2 9 10 9
となり、これでヒロとケンのポイントが結合された新しいベクトル(point.all)が作成されました。
数値を繰り返す
数値を繰り返す場合はrep関数が便利です。
rep( )内には以下のオプションを設定できます。
times | 繰り返す回数 |
each | 各要素の繰り返し回数 |
length.out | 全体の繰り返し回数 |
例えば、x<-c(1, 2, 3)として、
全体に3回反復するなら、
rep(x, times = 3)
rep(x, times = 3)
[1] 1 2 3 1 2 3 1 2 3
xの各要素(1,2,3)をtimesで指定した回数で反復するなら、
rep(x, times = c(1, 2, 3))
[1] 1 2 2 3 3 3
xの各要素をそれぞれ3回反復するなら、
rep(x, each = 3)
[1] 1 1 1 2 2 2 3 3 3
全体の反復回数はlength.outで指定すると、
rep(x, length.out = 5)
[1] 1 2 3 1 2
となります。rep( )は文字でも同様に反復できますよ!
ベクトルから特定の数字を抜き出す
ベクトルから特定の数字を抜き出す方法として[ ]を使用します。
例えば、ヒロの各試合ポイントを思い出してください。
point.hiro
[1] 14 8 4 6 6 2
では、3試合目のポイントを抜き出すのであれば、
point.hiro[3]
[1] 4
他にも、1,3,5試合のポイントを抜き出す場合は、
point.hiro[c(1, 3, 5)]
[1] 14 4 6
となります。
ベクトル内の特定の値を変更
この、[ ]を使えば、ベクトルの数値の変更も可能です。
ケンの各試合ポイントを確認してみます。
point.ken
[1] 8 4 2 9 10 9
もし、5試合目のポイントは10ではなく16であった場合、
point.ken[5] <- 16
point.ken
[1] 8 4 2 9 16 9
と、10→16へと修正されていますね。
まとめ
今回はRのNumericベクトルについてとNumeric演算子の簡単な使い方、またNumericベクトルの繰り返しや[ ](インデックス)の使い方を解説しました。
Rを使う上でとても基本的なものなので時間があるときに復習しておくのもいいですよ😉!
コメント