加算代入演算子とは
プログラミングの際に、ある変数に数を足したうえでもとの変数に代入するということがよくある。例えば、以下の JavaScript では、もともと x
に5が入っていたのが、それに 2 を足したうえで x
に代入しなおしている。
var x = 5; x = x + 2; console.log(x); // 出力は「7」
そして、JavaScript では、x = x + 2
のことを x += 2
と簡略化して書くことができる。
var x = 5; x += 2; console.log(x); // 出力は「7」
ここで使った +=
は「加算代入演算子」と呼ばれる。
また、JavaScriptでは、これと似たものとして以下のものもある。
名称 | 機能 | 例 |
---|---|---|
減算代入演算子 | ある変数に数を引いたうえでもとの変数に代入 | x -= 2 (これは x = x - 2 と同じ意味) |
乗算代入演算子 | ある変数に数をかけたうえでもとの変数に代入 | x *= 2 (これは x = x * 2 と同じ意味) |
除算代入演算子 | ある変数に数をわったうえでもとの変数に代入 | x /= 2 (これは x = x / 2 と同じ意味) |
こうした演算子はさまざまなプログラミング言語で用意されているが、R言語では用意されていない。
roperators
パッケージ
しかし、R言語でも roperators
パッケージを用いることで、加算代入演算子などが使えるようになる。
roperators
パッケージは、CRAN にて公開されているので、以下のようにすることでインストールできる。
install.packages("roperators")
roperators
パッケージにおける加算代入演算子は %+=%
である。普通のプログラミング言語と違って、%
(半角のパーセント)で囲まれていることに注意しよう。以下がその使用例である。
library("roperators") x <- 5 x %+=% 2 x # 出力は「7」 y <- 6:10 y %+=% 5 y # 出力は「11 12 13 14 15」
前半では、まず x
に5を代入し、それに 2 を足したうえで x
に代入しなおしている。後半では y
に 6, 7, 8, 9, 10 からなるベクトルを代入し、ベクトルの各要素に 5 を足した上で y
に代入しなおしている。Rの普通の算術演算子と同様にベクトルに対して一気に処理できるのである。
roperators
パッケージには、減算代入演算子などもある。
Rコマンド | 機能 |
---|---|
%+=% |
加算代入演算子 |
%-=% |
減算代入演算子 |
%*=% |
乗算代入演算子 |
%/=% |
除算代入演算子 |
%^=% |
累乗したうえで代入する演算子 |
%log=% |
対数をとったうえで代入する演算子 |
%root=% |
累乗根をとったうえで代入する演算子 |
いくつか使用例を見てみよう。次の例では、x
に円周率(π)をかけたうえで、x
に代入しなおしている。
x <- 10 x %*=% pi x # 出力は「31.41593」
また、次の例では、y
の10を底とする対数(=常用対数)を取ったうえで、y
に代入しなおしている。
y <- 1:10 y %log=% 10 y # [1] 0.0000000 0.3010300 0.4771213 0.6020600 0.6989700 # [6] 0.7781513 0.8450980 0.9030900 0.9542425 1.0000000
ちなみにデータフレームに対してもこのような演算子を適用することができる。例えば、以下の例ではデータフレームのすべての列に対して、2乗根(=平方根)を取ったうえで、もとのデータフレームに代入しなおしている [1] 。
df1 <- data.frame(X = 1:3, Y=9:11) df1 %root=% 2 df1 # X Y # 1 1.000000 3.000000 # 2 1.414214 3.162278 # 3 1.732051 3.316625
inplace
パッケージ
roperators
パッケージのほかに、inplace
パッケージにも加算代入演算子などが用意されている。
inplace
パッケージは、CRAN にて公開されているので、以下のようにすることでインストールできる。
install.packages("inplace")
このパッケージに用意されているのは以下の演算子である。
Rコマンド | 機能 |
---|---|
%+<-% |
加算代入演算子 |
%-<-% |
減算代入演算子 |
%*<-% |
乗算代入演算子 |
%/<-% |
除算代入演算子 |
roperators
パッケージと違い、=
を使わずに<-
となっていることに気を付けよう。
- ここの例では、データフレーム全体に対して適用したが、
df2$X %root=% 2
のようにすれば、1つの列だけに適用することも可能である。 [↩]