Rでは算術演算、論理演算、比較演算、行列の演算などの演算を行うことができる。
(1) 算術演算
> (1+2-3*4)/5^6 ← 入力 [1] -0.000576 ← 出力 > sqrt(2) [1] 1.414213 |
算術演算の表記
記号 |
意味 |
記号 |
意味 | |
+ |
足し算 |
^ |
累乗 | |
- |
引き算 |
%/% |
整数商 | |
* |
掛け算 |
%% |
剰余 | |
/ |
割り算 |
記号 |
意味 |
記号 |
意味 | |
sqrt |
√ の計算 |
cosh |
ハイパボリックコサイン | |
abs |
絶対値 |
tanh |
ハイパボリックタンジェント | |
exp |
2.71828... |
asinh |
sinh の逆関数 | |
expm1 |
x の絶対値 が1よりかなり小さい時に exp(x)-1 をより正確に計算 |
acosh |
cosh の逆関数 | |
log |
自然対数 |
atanh |
tanh の逆関数 | |
log10 |
常用対数 (底が10の対数) |
logb |
log と同じ | |
log2 |
底が2の対数 |
log1px |
x の絶対値が1より(かなり)小さい時,log(1+x) をより正確に計算 | |
sin |
サイン・正弦関数 |
gamma |
ガンマ関数 | |
cos |
コサイン ・ 余弦関数 |
lgamma |
log(gamma(x)) と同じ | |
tan |
タンジェント ・ 正接関数 |
ceiling |
引数以上の最小整数 | |
asin |
sin の逆関数 |
floor |
引数以下の最大整数:いわゆるガウス記号 | |
acos |
cos の逆関数 |
trunc |
整数部分を求める | |
atan |
tan の逆関数 |
round |
四捨五入 | |
sinh |
ハイパボリックサイン |
signif(x,a) |
x を 有効桁で a 桁まで丸める 正・0・負を判定する sign とは異なるので注意 |
注意:以下の例は x に値 2 を代入する例で,代入した名前は後に入力する式の中で自由に使うことが出来る.
x <- 2 x [1] 2 x + 3 [1] 5 |
式の中でオブジェクトが使われた場合,それは代入された値を意味する.例えば x <- 2 とした後で x + 3 と入力すれば,これは 2 + 3 と認識される.また,式の中で使われた名前にその式を評価した結果を再度代入することも出来,古い値が捨てられて新しい値が保存される.さらに,変数の値を別の変数にコピーすることも出来る.またベクトル型のデータであっても代入することができる
引数に式や関数を指定すれば,それを評価した値が引数として使われる.また,引数が 2 個以上ある場合はコンマ ,で区切って並べればよい.
x <- 10 # x に 10 を代入 log(x^2) # x^2 を計算した値を log に渡して計算 [1] 4.60517 log(x^2, base=10) # 底を指定する引数 base に 10 を指定して対数を計算 [1] 2 |
(2) 比較演算子・比較演算関数
比較演算子には次のようなものがある.== は単なる = ではないことに注意 ( = は「代入」) .以下の演算子で ASCII コード順の辞書式での文字列の比較も出来る.
記号 |
意味 |
|
記号 |
意味 |
== |
等号 |
>= |
≧ | |
!= |
≠ |
> |
> | |
<= |
≦ |
< |
< |
(3) 比較演算子・比較演算関数
論理演算子には次のようなものがある.
記号 |
意味 |
|
記号 |
意味 |
! |
否定 |
&& |
条件での論理積 | |
& |
論理積 |
|| |
条件での論理和 | |
| |
論理和 |
xor() |
排他的論理和 |
以下に例を示す.
x <- 7 (x > 2) && (x < 4) # 「2より大きい」かつ「4より小さい」 [1] FALSE if ( (x > 2) || (x < 8) ) print("True.") # 「2より大きい」または「8より小さい」ならば... [1] "True." |
条件分岐 : if ,else
ある条件で場合分けをして処理を行いたい場合は if 文,else 文を使う.以下の「条件式」には TRUE や FALSE の論理値を一つだけ返す式を入れなければならない.
x <- 2 if (x > 0) { # if ( 条件式 ) sum(1:x) # 条件式が TRUE のときに実行される部分 } else { x <- -x # 条件式が FALSE のときに実行される部分 sum(1:x) # } |
条件分岐 : switch
条件式の評価結果がケース 1 ,ケース 2 ,ケース 3 ,・・・ と多数あり,その結果によって場合分けを行いたい場合には switch 文を使う.例えば文字列で条件を分けた場合の switch 文は左下のような形になる.また,整数で条件を分けた場合の switch 文は右下のようになる.ただし,整数で条件を分けた場合は 「一致するものがない時に実行される部分」 は指定出来ない点,整数が 1 ... n でなければ NULL が返される点に注意.
a <- 1 switch(a, # switch(文字列, "1" = print("one"), # "1" のときに実行 "2" = print("two"), # "2" のときに実行 print("?") # 一致するものが ) # ない時に実行 [1] "one" a <- 2 switch(a, # switch(整数, print("one"), # 1 のときに実行 print("two") # 2 のときに実行 ) [1] "two" |
演算子 && ,||
条件式に2つ以上の条件が組み合わさった様な条件判定をさせたい場合は &&(かつ) や ||(または) を用いる.
a <- 2 b <- -3 if ((a > 0) && (b > 0)) { c <- a*b } else c <- -a*b c [1] 6 a <- 2 b <- -3 if ((a < 0) || (b < 0)) { c <- -a*b } else c <- a*b c [1] 6 |
繰り返し
for による繰り返し
ある処理を繰り返し行いたい場合,同じ文を何度も書く代わりに for 文を使う.
for ( ループ変数 in リスト )
でリストの要素の一番目から順に要素をループ変数にスタックして for 文中の式を実行し,リストの要素が無くなった時点で for ループから抜けるという動作をする.よって繰り返し回数は「リストの要素数」となる.
例えば,ループ範囲に整数値のベクトルを指定すると,x に 1 を 5 回足すことが出来る.
x <- 0 for (i in 1:5) { # for (ループ変数 in ベクトルやリスト) x <- x + 1 # ベクトルやリストの要素が空にならない限り式が繰り返される } x [1] 5 |
while による繰り返し
同じ繰り返しでも,ある条件が成り立っている間中ずっと「繰り返す式」を繰り返す場合は while 文を使う.ただし,条件式が TRUE しかとり得ない場合は,プログラムが永遠に実行され続けて暴走してしまうので注意が必要である.例えば以下を実行すると x の各要素に 1 を 5 回足すことが出来る.
x <- 0 while (x <= 5) { # while ( 条件式 ) x <- x + 1 # 条件式が TRUE である限り式が繰り返される } # 最初に条件式が FALSE ならば式は 1 回も実行されない x [1] 6 |
break を用いて繰り返し文から抜ける
break 文によって,for や while 等の「繰り返し文」の途中で繰り返しから抜け,next 文によって,for や while 等の「繰り返し文」の途中で,強制的に次の「繰り返し文」に移ることが出来る
break 文が評価されると,その時点で最も内側の繰り返しから抜けることになる.また,next 文が評価された時点でそれ以降の処理は中止され,「繰り返し文」の先頭に戻って次の繰り返しが開始される.
x <- 0 for (i in 1:5) { x <- x + 1 if (x == 3) break # x が 3 になったら } # for 文から抜ける x [1] 3 x <- 0 for (i in 1:5) { next # x に 1 を足す前に x <- x + 1 # 次の繰り返しが開始 } x [1] 0 |
Back to R