3.7 演算子(Operators)
R はベクトル演算が可能ですので演算子は基本的にベクトル演算に対応しています。
演算子は単項演算子と二項演算子に大別できます。二項演算子には算術演算子、比較演算子、論理演算子、特殊演算子があります。等長のベクトル型変数どうし、もしくは、ベクトル型変数とスカラ型変数の間の演算が可能です。不等長のベクトル変数に対して二項演算子を利用した場合、足りない値は先頭からリサイクルされて演算されます。条件によってはワーニングも表示されませんので不等長のベクトル演算は注意してください。
c(1:10) * c(1:2)## [1] 1 4 3 8 5 12 7 16 9 20
c(1:10) * c(1:3)## Warning in c(1:10) * c(1:3): 長いオブジェクトの長さが短いオブジェクトの長さの倍
## 数になっていません
## [1] 1 4 9 4 10 18 7 16 27 10
、
### 単項演算子
単項演算子は文字通り単項に作用する演算子です。単項演算子には算術演算子の -(マイナス)と論理型演算子の !(否定, NOT)があります。
x <- c(1:5)
x## [1] 1 2 3 4 5
-x## [1] -1 -2 -3 -4 -5
x <- c(TRUE, TRUE, TRUE, FALSE, TRUE)
x## [1] TRUE TRUE TRUE FALSE TRUE
!x## [1] FALSE FALSE FALSE TRUE FALSE
3.7.1 算術演算子
算術演算子は基本中の基本とも言える四則演算子である加算、減算、乗算、除算、ならびに、べき算(べき乗算)、整数除算(商、剰余)の六つの演算子があります。
a <- c(1:10)
b <- c(10:1)
a## [1] 1 2 3 4 5 6 7 8 9 10
b## [1] 10 9 8 7 6 5 4 3 2 1
a + b # 加算## [1] 11 11 11 11 11 11 11 11 11 11
a - b # 減算## [1] -9 -7 -5 -3 -1 1 3 5 7 9
a * b # 乗算## [1] 10 18 24 28 30 30 28 24 18 10
a / b # 除算## [1] 0.1000000 0.2222222 0.3750000 0.5714286 0.8333333 1.2000000
## [7] 1.7500000 2.6666667 4.5000000 10.0000000
a ^ b # べき乗算## [1] 1 512 6561 16384 15625 7776 2401 512 81 10
a %/% b # 整数除算(商)## [1] 0 0 0 0 0 1 1 2 4 10
a %% b # 整数除算(剰余)## [1] 1 2 3 4 5 1 3 2 1 0
3.7.2 比較演算子 Logical Operations
比較演算子は関係演算子とも呼ばれ、二変数の関係を調べる演算子です。同値関係を調べる等号記号や大小関係を調べる不等号などがこれにあたります。返り値は論理型となります。
| 小なり | 大なり | 小なりイコール | 大なりイコール | イコール | ノットイコール |
|---|---|---|---|---|---|
< |
> |
<= |
>= |
== |
!= |
例えば以下の二つのベクトル型変数に対する比較を行ってみます。
a## [1] 1 2 3 4 5 6 7 8 9 10
b## [1] 10 9 8 7 6 5 4 3 2 1
a < b## [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
a > b## [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
a <= b## [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
a >= b## [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
a == b## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
a != b## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
3.7.3 論理演算子 Boolean Operations
論理演算子はブール関数を評価するものです。論理積(AND)・論理和(OR)は演算対象により二種類の演算子があります。
| 演算 | 演算子 | 説明 |
|---|---|---|
| 論理積 | & |
AND(ベクトル演算用) |
| 論理和 | | |
OR,(ベクトル演算用) |
| 排他的論理和 | xor |
eXclusive OR(ベクトル演算用) |
| 否定 | ! |
NOT(単項演算子, ベクトル演算可) |
| 論理積 | && |
条件式における論理積 |
| 論理和 | || |
条件式における論理和 |
3.7.4 特殊演算子
特殊演算子は%文字と%文字で挟まれた演算子です。算術演算子の整数除算(商、剰余)厳密にいえば特殊演算子になりますが本資料では算術演算子として記載しています。
R では特殊演算子を用いて任意の演算を定義することができます。パッケージによっては特殊演算子を用意している場合もあります。
| 特殊演算子 | 演算内容 |
|---|---|
%*% |
内積(スカラー積) |
%in% |
マッチング |
%o% |
外積(ベクトル積) |
%x% |
クロネッカー積 |
3.7.5 演算子の優先順位
演算子の優先順位は下表の通りとなります。優先順位を変えたい場合は数学と同様に () を利用して明示的に優先順位を指定をしてください。下記以外はヘルプで Syntax を検索すると確認できます。
| 演算子 | 説明 | 順位 |
|---|---|---|
:: |
名前空間へのアクセス | 高 |
$ |
要素へのアクセス(データフレーム型、リスト型) | |
[], [[]] |
要素へのアクセス(ベクトル型、マトリクス型、アレイ型、リスト型) | |
^ |
べき乗 | |
- |
マイナス(単項演算子、+も使用可) |
|
: |
等差数列(c(1:10)のような数列) | |
%% |
特殊演算子(二項演算子) | |
*, / |
乗算、除算(二項演算子) | |
+, - |
加算、減算(二項演算子) | |
<, >, <=, >= |
比較演算子(大小関係) | |
==, != |
比較演算子(同値関係、大小関係と優先順位は同列) | |
! |
否定(単項演算子) | |
&, &&, |, || |
論理積、論理和(論理演算子) | |
~ |
フォーミュラ | |
<- |
代入 | 低 |