R における加算代入演算子など

概要
R言語には、加算代入演算子・減算代入演算子・乗算代入演算子・除算代入演算子が用意されていない。しかし、roperator パッケージや inplace パッケージを使うことでこれらの演算子を使うことができる。

加算代入演算子とは

プログラミングの際に、ある変数に数を足したうえでもとの変数に代入するということがよくある。例えば、以下の 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 パッケージには、減算代入演算子などもある。

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")

このパッケージに用意されているのは以下の演算子である。

inplace パッケージの演算子
Rコマンド 機能
%+<-% 加算代入演算子
%-<-% 減算代入演算子
%*<-% 乗算代入演算子
%/<-% 除算代入演算子

roperators パッケージと違い、=を使わずに<-となっていることに気を付けよう。

脚注
  1. ここの例では、データフレーム全体に対して適用したが、df2$X %root=% 2 のようにすれば、1つの列だけに適用することも可能である。 []