廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

R言語とJ言語についてのメモ

高機能関数電卓としての J

分数と少数

R では分数を少数として扱いますが J では両者を区別できます。

Rではこう。

> 1/3
[1] 0.3333333

Jでは % が割り算、

   1 % 3

0.333333

r が分数です。

   1r3

1r3

分数の足し算もできます。 1/3 + 1/2 = 5/6 はこんな感じ。

   1r3 + 1r2

5r6

複素数

J も R も複素数を扱うことができて、複素数の自然対数なんてのも使えます。

R ではこう。

> log(0+4i)
[1] 1.386294+1.570796i

J ではこう。

   0j1 + 1

1j1

0j1 は 0 + i(i は虚数単位)の意味です。

対数は ^. で表します。

   ^.0j4

1.38629j1.5708

ガンマ関数

ガンマ関数 - Wikipedia

 \displaystyle \Gamma\left(1 + \frac{1}{2}\right) = \frac{\sqrt{\pi}}{2}

を計算してみます。

R ではこう。

> factorial(1/2)*2
[1] 1.772454
> sqrt(pi)
[1] 1.772454

J ではこう。

   (! 1r2) * 2

1.77245


   o.1

3.14159


   %: o.1

1.77245

! が階乗(ガンマ関数)、o.1 が円周率、%: が平方根です。

J 原語のフォーク

R で総和を求めるのはこうやります。

> sum(c(3,5,7,9))
[1] 24

J ではこう。

   +/ 3 5 7 9

24

/ みたいな演算子を「副詞」 + みたいな演算子を「動詞」と呼びます。

/ の効果は挿入です。

   +/ 3 5 7 9

24

     3 + 5 + 7 + 9

24

+/ というのは足し算という演算子をベクトルに対して拡張しますよ、という意味です。

このような表記法は数学で習った「演算子」というものに対する認識が変わるような印象を受け、なんか目の前にあらたな世界が開けた気分になりました。

R で平均を求めるのはこう。

> mean(c(3,5,7,9))
[1] 6

J ではこうやります。

   mean =. (+ / % #)

   mean 3 5 7 9
6

# は要素の個数を表す演算子です。

J の行列

R で1から16までの数列を4行4列の行列にしたいときはこうやります。

mat <- matrix(1:16,4,4)

J ではこう。

   mat =.4 4 $ >:i.16
   mat
 1  2  3  4
 5  6  7  8
 9 10 11 12
13 14 15 16

i.16 が 0 から15までの数列、>: がインクリメントです。

行列の次元を求めるのは R だとこう。

> mat <- matrix(1:16,4,4)
> dim(mat)
[1] 4 4

J だとこうやります。

   $mat
4 4

データ可視化ツールとしての J

R では image 関数で行列を視覚化できます。

> mat2 <- matrix(c(1,0,0,1),2,2)
> mat2
     [,1] [,2]
[1,]    1    0
[2,]    0    1
> image(mat2)


f:id:abrahamcow:20150129171839p:plain

J ではこうやります。

   mat2 =. 2 2 $ 1 0 0 1
   mat2
1 0
0 1
   require 'viewmat'
   viewmat mat2

f:id:abrahamcow:20150129172304p:plain

R で sin カーブを書くのはこう。

plot(sin(0:10),type="l")

f:id:abrahamcow:20150129173213p:plain

J ではこうやります。

   load 'plot'
   sin=. 1&o.
plot(sin i.10)

f:id:abrahamcow:20150129172942p:plain