ほんとのこと知りたいだけなのに。

夏休みはもうおわり。

はじめてのR言語。RCL@Common Lispで。 (その弐)

今回は はじめてのR の「2章 R Consoleにおける簡単な計算と統計解析」を RCLでやってみるけぇ。

はじめてのR: ごく初歩の操作から統計解析の導入まで

はじめてのR: ごく初歩の操作から統計解析の導入まで

目次

1.四則演算。それと累乗と平方根
2.変数への代入/参照
3.R言語の簡単な関数:ベクタ生成と平均値と標準偏差
4.R言語の型の話

1.四則演算。それと累乗と平方根

まずは電卓変りに四則演算してみるけぇ。

Lisp文法での四則演算と累乗と平方根

R> (r "+" 1 2)
(3)
R> (r "-" 3 4)
(-1)
R> (r "*" 5 6)
(30)
R> (r "/" 7 8)
(0.875d0)
R> (r "+" (r "-" 3 4) (r "*" 5 6)) ;; 入れ子にもできる。
(29)
R> (r "^" 2 4)  ;; 累乗
(16.0d0)
R> (r "sqrt" 9) ;; 平方根
(3.0d0)

RCL文法での四則演算と累乗と平方根

R> [+ 1 2]
(3)
R> [- 3 4]
(-1)
R> [* 5 6]
(30)
R> [+ [- 3 4] [* 5 6]] ;; 入れ子にもできる。
(29)
R> [^ 2 4]  ;; 累乗
(16.0d0)
R> [sqrt 9] ;; 平方根
(3.0d0)

まぁ、問題ないわいね。

2.変数への代入/参照

次は変数への代入/参照よ。

代入はこんな感じでできるけぇ。

R> (r "<-" "x" 1)
(1)

変数の値を印字するんは 関数:print 使やぁ出来るんじゃけど、変数名は文字列指定しても、シンボル指定してもイケんけぇ。

こんとな感じになるけぇ。

;; 変数を文字列で指定した場合
R> (r "print" "x")
;R# [1] "x"
("x")

;; 変数をシンボルで指定した場合
R> (r "print" 'x)
WARNING: string attribute: env::462
;R!  以下にエラー (function (x, ...)  :  オブジェクト 'X' がありません 
; Evaluation aborted on #<SIMPLE-WARNING "string attribute: ~A" {10049E5A93}>.

文字列指定とシンボル指定がイケンのんは、Rの変数を扱う場合は r-variableを使わにゃイケんみたいなんよ。

R> (r-variable "x")
#<R-POINTER :INTEGER-VECTOR #.(SB-SYS:INT-SAP #X0170CA98) {1002D03953}>

で値を印字する場合は r-variable の戻値を print の引数にしちゃりゃぁ印字できるわ。 ちと面倒じゃけどね。

R> (r "print" (r-variable "x"))
;R# [1] 1
(1)

ちなみに、変数を印字する場合 R Console みたいに 変数直接っちゅうほうが楽じゃけぇやってみたんじゃけどダメじゃったわ。 関数:r は第一引数が関数じゃいないとイケんみたいじゃけぇ。

R> (r "x")

--- デバッガ ---
x is not a valid function
   [Condition of type SIMPLE-ERROR]

上のことをRCL文法でやるとこんな感じ。ちょっと統一感がないのぉ。

;; 代入
R> [<- "x" 2]   ;; [<- 'x 2] だとエラーになる。
(2)
;; 印字
R> [print 'x]
;R# [1] 2
(2)
;; Lisp文法実行時の値が 2 に変更されとるけぇ、同じもん扱ぉとるじゃろう。
R> (r "print" (r-variable "x"))
;R# [1] 2
(2)

あと、文字列をセットしたらこんな感じ。 さっきの x を上書きしとるけぇ R言語の変数には型情報をもっとらんのんじゃ ね。

R> (r "<-" "x" "hanage")
("hanage")
R> (r "print" (r-variable "x"))
;R# [1] "hanage"
("hanage")

変数は全角でもイケるんじゃね。まぁ、キモいけぇ使わんじゃろうけど。

R> (r "<-" "鼻毛" "so long")
("so long")
R> (r "print" (r-variable "鼻毛"))
WARNING: string attribute: pairs
;R# [1] "so long"
("so long")

3.R言語の簡単な関数:平均値と標準偏差

平均値と標準偏差を算出する関数を利用してみるけぇ。

それぞれの関数は以下のとおりじゃけぇ。

こいつらにデータ渡すときには値をまとめたものを引数で与えんといけんのん じゃけど、それは c (combine) でやるけぇ。

c (combine) は引数の値をベクタにする関数みたい。

R> (r "c" 160 167 169 173)
(160 167 169 173)
R> (r "<-" "身長" (r "c" 160 167 169 173))
(160 167 169 173)
R> (r "print" (r-variable "身長"))
;R# [1] 160 167 169 173
(160 167 169 173)
R> (r "mean" (r-variable "身長")) ;; 平均値
(167.25d0)
R> (r "sd" (r-variable "身長"))   ;; 標準偏差

RCL文法で。(ちょっと手ぬきで)

R> [mean [c 160 167 169 173]]
(167.25d0)
R> [sd [c 160 167 169 173]]
(5.439056290693573d0)
R> 
(let ((vals [c 160 167 169 173]))
  [sd vals])  ;; なんかキモいよねぇコレ。
(5.439056290693573d0)

4.R言語の型の話

力つきたし、なんか本どおり行かなかったので その時のコードをそのまま貼り付けで。

factor型ダメなんじゃろうか。

R> (r "<-" "文字列の例" (r "c" "f" "f" "m" "m" "f"))
("f" "f" "m" "m" "f")
R> (r "print" (r-variable "文字列の例"))
;R# [1] "f" "f" "m" "m" "f"
("f" "f" "m" "m" "f")
R> (r "class" (r-variable "文字列の例"))
("character")
R> (r "class" (r-variable "身長"))
("integer")
R> 
(r "<-" 
   "要因型の例" 
   (r "factor" (r "c" "f" "f" "m" "m" "f")))
(1 1 2 2 1)
R> 
; No value
R> (r "print" (r-variable "要因型の例"))
;R# [1] 1 1 2 2 1
(1 1 2 2 1)
R> (r "class" (r-variable "要因型の例"))
("integer") ;; ありゃ? なぜ factor にならない?
R> (r "str" (r-variable "要因型の例"))
;R#  int [1:5] 1 1 2 2 1
:NIL ;; むぅ。。。メッチャ整数じゃねぇ。。。。。

次回へ

次回は四章やるわ。

今回 ? なところはいつかリベンジするし!!

ほいじゃぁね〜