演算子

R は加減乗除を行う算術演算子以外に、他のプログラミング言語と同様に理論演算子などが用意されている。

算術演算子

算術演算子は、四則演算などに用いる演算子である。加減乗除の他に、累乗、剰余や商を求める演算子も用意されている。

演算子意味入力式実行結果
+3+47
-4-13
*4*520
/9/24.5
%/%整数商9%/%24
%%剰余(mod)9%%21
^累乗2^416

R を起動し、計算式を入力し、Enter キーを押すことで、計算式が実行され、結果が画面に現れる。

3 + 4
## [1] 7

3 - 4
## [1] -1

9 %/% 2
## [1] 4

9 / 2
## [1] 2

9 %% 2
## [1]4

代入演算子

変数に数値を代入するときに利用する演算子。数学的には「文字に数値を代入する」ことかな。R は数学と同様に、計算する前にいくつかの変数を用意し、様々な複雑な演算を行ったあとに、実際の数値を代入する感覚で利用する。(例えば、2 次方程式の解は ax2 + bx + c = 0 として x = (-b ± (b2 - 4ac)1/2)/2a と計算してから、最後に a、b、c を代入する。)

x <- 3        #xに3を代入

y <- x        #yにxを代入(x=3なので、y=3)

z <- x * y  #xとyの積をzに代入(x=3, Y-3なのでこ、z=9)

x <- 10      #xに10を代入(3という情報が消える)

論理演算子

理論判断を行う際にりようする演算子である。AND は & または &&。ORは | または ||&| は、演算結果をベクトルとして返す。ベクトル演算時における条件判断などと共に用いられることが多い。また、&&|| は、演算結果を TRUE または FALSE で返す。if 文の判断条件などと共に用いられることが多い。

& と |

x <- c(T, T, F, F, T, T, F, F)
y <- c(T, F, T, F, T, F, T, F)
z <- c(1, 2, 3, 4, 5, 6, 7, 8)

x & y
## [1]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE

x | y
## [1]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE

# x = T かつ y = T の時のzの値を取り出す
z[x & y]      # z[x == T & y == T] も可
## [1] 1 5

# x = T または y = T の時のzの値を取り出す
z[x | y]      # z[x == T | y == T] も可
## [1] 1 2 3 5 6 7

# x = T かつ y != T の時のzの値を取り出す
z[x & !y]     # z[x == T & y != T] も可
## [1] 2 6

&& と ||

a <- T
b <- T
c <- F

if (a) {        # aがTRUEならば
  "a == TRUE"
}
## [1] "a == TRUE"

if (a && b) {   # aがTRUEかつbがTRUEならば
  "a == TRUE and b == TRUE"
}
## [1] "a == TRUE and b == TRUE"

if (a && c) {   # aがTRUEかつcがTRUEならば
  "a == TRUE and b == TRUE"  
}
# (cがFALSEであるため)なにも出力されない

if (!c) {
  "c != TRUE"
}
## [1] "c != TRUE"

any と all

R には、理論演算子に似た働きをする関数が用意されている。anyall である。

any入力された引数のうち、1 つ以上の TRUE が存在すれば、TRUE を返す。
all入力された引数のうち、すべてが TRUE ならば、TRUE を返す。
x <- c(TRUE, TRUE, TRUE)
y <- c(TRUE, TRUE, FALSE)
z <- c(FALSE, FALSE, FALSE)

any(x)
## [1] TRUE

any(y)
## [1] TRUE

any(z)
## [1] FALSE

all(x)
## [1] TRUE

all(y)
## [1] FALSE

all(z)
## [1] FALSE

この関数を利用して、以下のように、閾値判断などに用いると便利。

w <- c(1, 2, 3, 4, 5)

any(w > 0)   # 0よりも大きいの要素は存在するか(答え:すべてが0上なので真)
## [1] TRUE

any(w > 2)   # 2よりも大きいの要素は存在するか(答え:3,4,5があるので真)
## [1] TRUE

all(w > 0)   # すべての要素は0よりも大きいか(答え:真)
## [1] TRUE

all(w > 2)   # すべての要素は2よりも大きいか(答え:判例「1」があるので偽)
## [1] FALSE