Rのページ

Rは統計処理言語の一つで,Sをベースにしてオープンソースとして開発されているものです. 統計処理はもちろんのこと,グラフィックも強力ですので,個人的にはグラフソフトとして使っています. ほとんどのコマンドがコマンドラインで指定するので,プログラムライクという意味では使いやすいのですが,機能が多いためにオプションの指定が面倒です.

インストール

Debian Sargeでは,
apt-get -y install r-base r-cran-rgl
としています. 必要に応じてcranのライブラリを組み込んで下さい. その他のOSに関しては,The R Projectから実行ファイルをダウンロードして下さい.

実行

Linuxでは,コマンドラインからRと打ち込みます. 終わるときは,q()です. 他のOSでは,アイコンをクリックするとかで起動するのだと予想されます.

使用法

データを読み込んで,データ処理をして,グラフを書くという一連の作業を,分割して要点を示したいと思います. 代入を表す記号がイコールでは無い点に注意して下さい.

データの読み込み

ファイルからデータを読み込むときには,以下のコマンドを使います. ファイルは,単純な区切り文字で区切られたテキストで,それ以外の部分があるとエラーを返してしまいますが,その場合には"#"でコメントアウトします. 先頭にそれぞれのデータの名前を示した行があっても構いませんが,その場合には,header=TRUEを指定します. 読み込むデータは,データフレームに保存されます. これらのデータにアクセスするためには,df$nameという感じで行います. データフレーム中の名前は.colnames(df)で表示できます.
コマンド 内容
df<-read.table("file",header=TRUE) スペース区切りのファイルから読み込んで,dfに記録します.
df<-read.table("file",header=TRUE,sep=":") コロン区切りのファイルから読み込んで,dfに記録します.
df<-read.csv("file",header=TRUE) コンマ区切りのファイルから読み込んで,dfに記録します.
また,簡単な数の列は,ベクトルとして作ります.
コマンド 内容
dv<-c(1,2,3) 指定した数の列をdvに記録します.
dv<-1:5 1から5までの連続した整数の列をdvに記録します.
dv<-seq(1,5,by=0.5) 1から5までの0.5おきの数の列を,dfに記録します.
dv<-seq(1,5,length=3) 1から5までの長さが3の数列を,dfに記録します.

データ処理

数値やベクトルには,通常に演算や関数を適用することができますが,そのときには,それぞれの要素に関して,演算や関数が適用されたベクトルとなります. また,sum(),mean(),var(),median(),cor(),max(),min()のような統計関数を使うことができます. ベクトルを処理する方法は他にもいろいろありますが,簡単な例をいくつか挙げておきます.
コマンド 内容
z<-c(x,y) ベクトルの結合
x<-ifelse(x<0,x,0) 0以下の数字を0にする.

グラフ

グラフは,細かいことを気にしなければ次のコマンドで書くことができます.
plot(x,y)
実際には,見栄えを良くするために,様々なオプションをつけたり, コマンドを指定しなければなりません. 凡例を付けるには,以下のようにします.
legend(100,50,
c("a","b","c","d","e"),col=rainbow(5),
lty=1,lwd=1,bty='n')

文字列

文字列を処理するコマンドもいろいろと用意されています.
コマンド 内容
paste(c("a","b"),collapse=",") 文字列の配列をくっつける.
paste("a","b",sep=",") 複数の文字列をくっつける.

Tcl/Tk

GUIをTcl/Tkを使って作ることができる.
require(tcltk)
tt<-tktoplevel()
いくつかのwidgetについて少し使いやすくするための ツール を作りましたので,参考にして下さい.

プログラム

Rでプログラムを組むことができます。 その基礎を、例を示すことで紹介します。

代入

代入は<-で行いますが、assignを使うと文字列で変数名を指定して代入することもできます。
x<-"e"
"y"<-"e"
assign(y,2.71828)
グローバル変数に代入するときには、<<-を使います。 getを用いて文字列で変数名を指定して値を取り出すこともできます。
apple<-10; orange<-100
s<-"apple"
get(s)

ベクトルとリスト

ベクトルの要素はすべて同じ型で無ければならず、1から始まるindexを指定して要素を取り出します。
x<-c(1,2,3)
x[1]
リストの要素はどんなものでもよく、1から始まるindexまたは、nameを指定して要素を取り出します。
x<-list(first=1,second="2")
str(x)
x[[1]]
x$second

条件分岐

if(x<0){y <- -x}
else{y <- x}
switch(
)

ループ

repeatで、永久ループをすることができます。
i<-0
repeat{ cat(i); i<-i+1; if(i>10){break}}
forやwhileループも使えます。
for(i in 1:10){ cat(i) }
for(i in list(1,"a",2,"b")){ cat(i) }
i<-0
while(i<10){ cat(i); i<-i+1 }

関数

値を返す関数を定義することができる。
larger <- function(x,y){
  if(x>y){z <- x}
  else{z <- y}
  return(z)
}
larger(1,2)
関数に値を代入するような形で使用する特殊な関数も定義することができる。
"larger<-" <- function(x,value){
  if(x






プログラム例

Rでグラフを書くのは比較的面倒です。 そこで、グラフを書くのを支援するGUIをtcltkを使って作ってみました。 tkを使うためのツールtktool.rと、 plotコマンドのパラメータなどを格納したファイルplot.rと、 プログラム本体graphtk.rが必要です。 source("graphtk.rb")として、出てきたメニューから使用します。