以下の内容はhttp://blog.livedoor.jp/splus_r/archives/cat_50010905.htmlより取得しました。




以前紹介したRの本の改訂版が出ていました。Rというのは数値計算や統計解析をする人にとっては必須のフリー・ソフトです。めちゃくちゃよく出来ています。

それでこの舟尾さんの本は、初心者がRを使えるようになるための非常にわかりやすい入門書です。Rの初心者はとりあえずこの本を買いましょう。

今日はリストを学びます。

前回までに、ベクトルとマトリクスを学びました。
基本的にベクトルは一次元のデータで、マトリクスは二次元のデータです。
そして、ベクトルとマトリクスには、共通の制限がありました。
ベクトルやマトリクスの各々の要素は、全て同じデータのタイプでなければいけませんでした。
例えば、文字と数値データが混在してはいけないわけです。

一方、リストはどんなデータでも要素として組み入れることが出来ますし、リストの中にリストを作って入れ子構造にすることも出来ます。

それでは、さっそくリストを作ってみましょう。

> s <- 1
> v <- c(1:10)
> m <- rbind(c(1,2),c(3,4))
> str <- "Hello!"
> myList <- list(s,v,m,str)
> myList
[[1]]
[1] 1

[[2]]
[1] 1 2 3 4 5 6 7 8 9 10

[[3]]
[,1] [,2]
[1,] 1 2
[2,] 3 4

[[4]]
[1] "Hello!"

最初に定義した4つのオブジェクトがリストの[[1]]から[[4]]までに収まりましたね。
ベクトルやマトリクスと同様に要素に名前をつけることも出来ます。

> names(myList) <- list("scalar", "vector", "matrix", "string")
> myList
$scalar
[1] 1

$vector
[1] 1 2 3 4 5 6 7 8 9 10

$matrix
[,1] [,2]
[1,] 1 2
[2,] 3 4

$string
[1] "Hello!"

リストの各要素の取り出し方ですが、ベクトルとマトリクスとはやや違います。

> myList["string"]
$string
[1] "Hello!"

> myList[["string"]]
[1] "Hello!"

> myList[4]
$string
[1] "Hello!"

> myList[[4]]
[1] "Hello!"

ベクトルやマトリクスの場合は[]で指定してやればよかったのですが、リストの場合はさらに[[]]があります。
一重括弧[]の場合は、取り出される中身も要素がひとつのリストですが、二重括弧[[]]の場合は、もともとのデータがそのまま取り出されます。

この辺のデータのタイプに関する理解は重要なので、次回に重点的に勉強します。



今日はマトリクス(行列)を学びましょう。

前回、勉強したベクトルをつなげて作ります。

まず、ベクトルを列でつなげる場合はcbindを使います。
cはもちろんcolumnで列の意味です。

> x <- cbind(1:3,c(4,5,6))
> x
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6

行でつなげるrbindもあります。
rはrowで行の意味です。

> y <- rbind(1:3,c(4,5,6))
> y
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6

行列の要素を取り出すには、何行目の何列目かを指定します。

> x[3,2]
[1] 6

次のようにして行全て、列全てを取り出すことも出来ます。

> y[2,]
[1] 4 5 6

> y[,2]
[1] 2 5

また、行と列に名前をつけることが出来ます。

> rname <- c("rA","rB","rC")
> cname <- c("cA","cB")
> dimnames(x) <- list(rname,cname)
> x
cA cB
rA 1 4
rB 2 5
rC 3 6
> dimnames(x)
[[1]]
[1] "rA" "rB" "rC"

[[2]]
[1] "cA" "cB"

行の名前を表すベクトルと、列の名前を表すベクトルを作って、それを行列にdimnamesを使って、リストの形で渡します。

リストに関しては次回勉強しますが、ここで簡単に説明しておくと、リストはその要素に数値でもベクトルでも行列でも格納できるオブジェクトです。

さあ、ベクトルと行列に関して、大体分かって来ましたね。

日本語で出版されているS-PlusR関連の本はほとんど全て買いましたが、この本が圧倒的に分かりやすいです。

私はこの本を一読した後に、Rの仕組みが一通り理解できて、使いこなせるようになりました。

S-PlusRを勉強したい方は、何はともあれ、この一冊の購入を強くお勧めします。



追記:改訂版が出ています。

ベクトルってのは、みんなが高校生のときに習ったベクトルのことです。
ベクトルの計算がRS-Plusで簡単にできるというのは、もちろん、すばらしいのですが、RS-Plusではベクトルはさらに重要な意味を持っています。

C言語Javaでは、繰り返しなどの処理でforなどのループ構造を多用しますが、RS-PlusではVectorized calculationと言うのを多用します。
この辺は、後でゆっくり勉強しましょう。

今回は、簡単なベクトルの計算を理解しましょう。

> 1:10
[1] 1 2 3 4 5 6 7 8 9 10
> 5:-3
[1] 5 4 3 2 1 0 -1 -2 -3
> seq(1,3,by=0.25)
[1] 1.00 1.25 1.50 1.75 2.00 2.25 2.50 2.75 3.00
> rep("a",3)
[1] "a" "a" "a"

まずは、ベクトルを生成するための便利なコマンドを覚えると良いでしょう。
":"は刻み幅1で数列を作ります。
seq関数を使えば、刻み幅をby=xで指定できます。
rep(x,y)でxをy回繰り返すと言う意味です。

また、文字列は"string"と言うように"で括って表現します。

それでは、これらの数列の要素をひとつのベクトルにまとめましょう。

> a <- c(1:12)
> a
[1] 1 2 3 4 5 6 7 8 9 10 11 12

"c"はconcatenateと言う意味で、複数の要素を連結してひとつのベクトルを作ります。
今回は、a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) とベクトルが生成されました。

> b <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
> b
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

文字列のベクトルを作ることもできます。
また、ベクトルの各要素に名前をつけることもできます。

> names(a)
NULL

今のところ、名前がないのでNULLが帰ってきました。

> names(a) <- b
> a
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1 2 3 4 5 6 7 8 9 10 11 12

ベクトルaの各要素の名前をベクトルbにしました。

次はベクトルの各要素の呼び出し方を見てみましょう。

> a[2]
Feb
2
> a[5:9]
May Jun Jul Aug Sep
5 6 7 8 9
> a[-3]
Jan Feb Apr May Jun Jul Aug Sep Oct Nov Dec
1 2 4 5 6 7 8 9 10 11 12
> a[c("Sep", "Oct")]
Sep Oct
9 10

a[x]でベクトルaのx番目の要素を参照します。
また、xにベクトルを指定することもできます。
"-"をつけると「それ以外」と言う意味になります。
また、さきほどつけた要素の名前を直接指定してもかまいません。

代入と言う概念は、C言語とかJavaとかのプログラミング言語をかじったことがある人には、簡単でしょう。

> x <- 2
> x
[1] 2

これは、xと言う変数に2を代入すると言う意味。
"<-"というオペレーターを使います。
変数と言うよりは、値の「入れ物」と考えた方が分かりやすいでしょう。

> x <- 3
> x
[1] 3

xに新たに3を代入しました。
これで、前まで入っていた値は捨てられます。

また、break、else、for、function、if、in、next、repeat、return、while、TRUE、FALSEのように特別の意味がある予約語を変数として使うことはできません。
1Aみたいに数字から始まる文字列も使えません。

> x <- sqrt(2)
> x
[1] 1.414214
> x^2
[1] 2
>
> y <- sqrt(3)
> y
[1] 1.732051
> x*y
[1] 2.449490

もちろん、値を代入された変数どおしで様々な演算をすることができます。




とりあえず、お約束として、簡単な計算をして見ましょう。
R Consoleで1+1を計算します。

> 1+1
[1] 2

1+1って書いて、リターン・キーを押すだけ。
ちょっと複雑なやつ。

> (1+2+3)*4/5
[1] 4.8

できました。
次は、組み込み関数を使ってみましょう。

> sin(1)
[1] 0.841471
> sin(pi)
[1] 1.224606e-16
> pi
[1] 3.141593

sin(pi)ってやると、ちょっと誤差があるので、ぴったりゼロにはなりませんね。

> 2^10
[1] 1024
> 2^0.5
[1] 1.414214

累乗は^を使って表します。
エクセルと同じですね。

> sqrt(2)
[1] 1.414214

ルートはsqrtでも計算できます。

> sin(1); cos(1); tan(1); sinh(1); cosh(1); tanh(1)
[1] 0.841471
[1] 0.5403023
[1] 1.557408
[1] 1.175201
[1] 1.543081
[1] 0.7615942

三角関数はもちろん一通り揃ってます。
ちなみに、;を使えば複数の計算をいっぺんに実行できます。

> asin(1); acos(1); atan(1); asinh(1); acosh(1); atanh(1)
[1] 1.570796
[1] 0
[1] 0.7853982
[1] 0.8813736
[1] 0
[1] Inf

三角関数の逆関数も揃ってます。
asinってのはsin^-1って意味ね。

> log(1); log10(1); log2(1); exp(1)
[1] 0
[1] 0
[1] 0
[1] 2.718282

対数に関する関数です。
logの底はeでlog10の底は10でlog2の底が2ですよ。
exp(x)はeのx乗です。

> logb(2,1); logb(2,2); logb(2,4); logb(2,10);
[1] Inf
[1] 1
[1] 0.5
[1] 0.30103

logb(x,y)で底がyの対数を計算できます。

> round(pi); floor(pi); ceiling(pi); trunc(pi); sign(pi)
[1] 3
[1] 3
[1] 4
[1] 3
[1] 1

roundが小数以下を四捨五入、floorが小数を切捨、ceilingが切上、truncが整数部分、signが引数の符号です。

> signif(pi,3)
[1] 3.14

signif(x,y)でxを有効桁y桁で丸めます。

> 10 %/% 3
[1] 3
> 10 %% 3
[1] 1

%/%が整数商で、%%が余りを計算します。

> q()

q()で終了です。

以上で、簡単な計算の勉強が大体できましたね。


私は会社では豪華にS-Plusを使っていますが、家ではRを使うことにします。
なんせ、Rは無料のフリーウェア。
しかし、機能的にはS-Plusに見劣りしません。
GUIはやっぱり安っぽいけど、ふつう、男なら黙ってコマンド・ラインでしょう。

と言うわけで、今日、さっそくRの最新版を家のラップトップにインストールしました。
今のところ、最新版はVersion 2.2.1となっています。

http://r.nakama.ne.jp/R-2.2.1/binary/win32/においてある、R-2.2.1-win32.exeをダウンロードして、ダブルクリックしましょう。

インストール・ウィザードに従えば、簡単に日本語版Rがインストールできますが、一つだけ鬼門があります。


Version for East Asian Languagesを選択!


インストールコンポーネントの選択のところで、"Version for East Asian Languages"をチェックしてください。

ついでに、"PDF Reference Manual"もチェックしておくと良いでしょう。

このサイトに詳しくインストール方法が載ってますけど、基本的にはR-2.2.1-win32.exeを自分のPCにコピーしてきて、"Version for East Asian Languages"をチェックするのを忘れずに、ウィザードの指示に従うだけです。

ちなみに、私は英語版のまま使いたかったんですけど、Windowsの設定が日本語になっていると、勝手に日本語版になっちゃうようです。

誰か、Windowsを日本語環境のままで、Rを英語にする方法を知っていたら教えてください。
なんか、エラー・メッセージが日本語だと間抜けなんですよね。

とりあえず、Rのインストールは完了。


こんにちは。統計太郎です。

今までは、C++とかJavaとかのプログラム言語とエクセル+VBAで大体の処理をしていたのですが、同僚がみんなS-Plus使っているので、私も食わず嫌いはいけないと思い使い始めました。

そしたら、S-Plusってめちゃくちゃすげーじゃないですか。
Cで書いたら100行ぐらいかかる処理が数行で書けちゃったりするんです。

S-Plusに惚れました。。。

このブログは私がS-Plusを学ぶための備忘録にしようと思っています。


PS: ちなみにS-PlusRもベル研で開発された統計解析言語Sと言うのをもとに作られたソフトウェアなんだけど、S-PlusってのはGUIとかいろいろついている有料パッケージで、RってのがGUIとかはあんまり充実してないけどS-Plusとほとんど同じことができるフリーウェアのこと。





以上の内容はhttp://blog.livedoor.jp/splus_r/archives/cat_50010905.htmlより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14