Rの初歩
Rのインストール
CRAN(「シーラン」または「クラン」,Comprehensive R Archive Network)のミラーサイト(日本では統数研 http://cran.ism.ac.jp/ など)からダウンロードし,インストールしてください。
Windowsについては Windows用Rガイド をご覧ください。
Mac版は,「R」メニューの「環境設定...」から各種設定ができます。Emacs派の人は,環境設定の「エディタ」で外部エディタとして /usr/bin/emacsclient コマンドを指定しておくといいでしょう(Emacsの初期設定ファイルで (server-start)
しておきます)。Emacsでの編集が終わったら C-x #
します)。
UNIX系OSの端末では,R
と打ち込んで起動します。カレントディレクトリがRの作業ディレクトリになります。
ESS - Emacs Speaks Statistics を使えばEmacsの中からRを使うことができます。アンダースコア _
が <-
に変換されたくない場合は (ess-toggle-underscore nil)
をEmacs側で設定しておきます。
簡単な計算
まず足し算です。プロンプト >
の右側に 123+456
と打ち込んでEnterキーを打ちます。[1]
の右側に出るのが答えです。
> 123+456 [1] 579
掛け算は *
,割り算は /
です。計算の順序は,通常の数式と同様,掛け算・割り算が先,足し算・引き算が後になります。
> 123*456-987/654 [1] 56086.49
どんどんやってみましょう。#
より右側はコメント(説明のための注釈)です。以下では説明のためにコメントをいろいろ書いていますが,実際に打ち込むときはコメントは必要ありません。
> pi # これは円周率 [1] 3.141593 > print(pi) # これでもいいかな [1] 3.141593 > print(pi,digits=16) # 桁数を増やしたい [1] 3.141592653589793
デフォルトの表示桁数を例えば16桁にしたければ options(digits=16)
のように打ち込みます。元に戻すには options(digits=7)
です。
Rのコンソールへの入力は,ヒストリー(履歴)機能が使えます。[↑]キー,[↓]キーで履歴を前後できます(Emacs中では M-p
,M-n
)。
> x = pi # x に pi の値を代入 > x # 入っているかな [1] 3.141593 > X # 大文字を打ち込むと エラー: オブジェクト "X" は存在しません
変数にあたるものをRではオブジェクトといいます。
Rは大文字・小文字を区別します。小文字 x
と大文字 X
はまったく別のものです。
> pi = 3 # いたずらをしてやろう > pi # どっちのpiがアクセスできるのだろう [1] 3 > rm(pi) # piをrm(remove,削除)すると > pi # 自分の作ったpiだけ消える [1] 3.141593
pi
のような既存のオブジェクトを上書きすることは,なるべく避けたほうがいいので,新しいオブジェクトを使いたいときには,Rコンソールに打ち込んでみて「オブジェクト …… は存在しません」というメッセージが現れるかどうか調べるといいでしょう。
1文字の定義済みのオブジェクトとしては c q t C D F I T
があります。
pi
(円周率 π = 3.14159...)は定義済みですが,e
(自然対数の底 e = 2.718...)は定義されていません。
> e エラー: オブジェクト "e" は存在しません
e = e1 = exp(1) ですから,指数関数 exp()
を使えば e が求められます。
> exp(1) # 指数関数なら [1] 2.718282
関数の括弧を閉じないとどうなるでしょうか。
> sin(pi/2 # おっと,括弧を閉じるのを忘れてEnterを押してしまった…… + ) # 閉じ括弧を入力してEnter [1] 1 >
このように,続きの入力を促すプロンプト +
が出ますので,その右側に続きを入力してEnterを押します。
ところで,答えの前にいつも出る [1]
とは何でしょう? 実は,Rでは値は一般にベクトルで,その要素番号(添字)が [1]
から始まるのです。つまり,この数字は各行の最初の要素番号です。
> x = 5:70 # xに長いベクトル (5,6,7,8,...,70) を代入 > x # 表示させてみる [1] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [18] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [35] 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 [52] 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
x[1]
= 5, x[2]
= 6, x[18]
= 22, x[35]
= 39, ... というわけです。
一般のベクトルを入力するときは c()
という関数を使います。c
はcombineまたはconcatenate(結合する)の頭文字です。
> x = c(3.14, 2.718, 0.577) > x [1] 3.140 2.718 0.577 > x + 10 # 演算は個々の要素に作用する [1] 13.140 12.718 10.577 > x * 10 # * は掛け算の記号 [1] 31.40 27.18 5.77 > sqrt(x) # 関数も個々の要素に作用する [1] 1.7720045 1.6486358 0.7596052 > length(x) # ベクトルの長さ [1] 3 > sum(x) # 和 [1] 6.435 > mean(x) # 平均 [1] 2.145 > sd(x) # 標準偏差 [1] 1.374223 > x[1] # 配列の第1要素 [1] 3.14 > x[2:3] # 配列の第2〜3要素 [1] 2.718 0.577
ヘルプを読むには,RStudioなら右下のペインの「Help」で検索します(現時点ではすべて英語です)。
コマンドでヘルプを見たい場合の方法を列挙しておきます。
help.start()
… ブラウザでオンラインヘルプhelp(mean)
または?mean
… 特定の項目の表示help("=")
やhelp("if")
… 予約語のヘルプhelp.search("...")
… キーワード検索apropos("...")
… 部分一致検索
終了するには,[閉じる]ボタンを使ってもいいのですが,Rのコンソールに
> q()
と打ち込むのが伝統的な方法です。q
はquit(終わる)の頭文字です。すると,
作業スペースを保存しますか?
または
あなたがシステムを実行するとき、復元はそれがあなたのごみ箱を空にするdoed
Save workspace image? [y/n/c]:
と聞いてきますので,作業スペース(現在の状態)を保存して終了するなら y
(はい),保存しないで終了するなら n
(いいえ),終了をキャンセルする(終了しない)なら c
(キャンセル)と答えます。通常は n
(いいえ)と答えます。y
(はい)と答えた場合,作業スペースの内容がRの作業用ディレクトリの .RData
というファイルに保存され,次回の起動時に自動的に読み込まれます。大量のデータを扱った場合,.RData
は非常に大きくなります。y
でも n
でも,打ち込んだコマンドの履歴が作業用ディレクトリの .Rhistory
というファイルに入るはずです(入らない設定になっていることもありますので確認してください)。この .Rhistory
を残しておくほうが .RData
より便利です。作業用ディレクトリは,Windows版では「ファイル」メニューの「ディレクトリの変更...」,Mac版では「その他」の「作業ディレクトリの変更...」から設定できます(あるいはコマンド getwd()
で調べ,setwd("...")
で変更できます)。
Rに慣れよう
ここで時間があれば,少しRに慣れるために,寄り道をしましょう。
データの読み込ませ方
少数のデータであれば,次のように書き並べます。
> 身長 = c(168.5, 172.8, 159.0) > 体重 = c(69.5, 75.0, 56.5)
いわゆる肥満度(BMI,body mass index)を計算してみましょう。/
は割り算,^2
は2乗を意味します。
> 体重 / (身長 / 100)^2 [1] 24.47851 25.11735 22.34880
小数点以下が長すぎるなら,round()
で丸めます。
> round(体重 / (身長 / 100)^2) [1] 24 25 22 > round(体重 / (身長 / 100)^2, 1) [1] 24.5 25.1 22.3
身長・体重を一つのデータフレームにまとめると便利です。
> X = data.frame(身長, 体重) > X 身長 体重 1 168.5 69.5 2 172.8 75.0 3 159.0 56.5
行には 1
,2
,... という名前が自動的に付きます。行の名前を変えるには次のようにします:
row.names(X)=c("太郎", "次郎", "花子") > X 身長 体重 太郎 168.5 69.5 次郎 172.8 75.0 花子 159.0 56.5
最初から行の名前を指定することもできます:
> X = data.frame(身長, 体重, row.names=c("太郎","次郎","花子"))
こうしてデータフレーム X
を作れば,元の身長・体重は消してもかまいません:
> rm(身長, 体重)
このデータフレームに性別を追加しましょう:
> X = transform(X, 性別=c("M", "M", "F")) > X 身長 体重 性別 太郎 168.5 69.5 M 次郎 172.8 75.0 M 花子 159.0 56.5 F
さらにBMIを付け加えてみましょう:
> X = transform(X, BMI=round(体重 / (身長 / 100)^2)) > X 身長 体重 性別 BMI 太郎 168.5 69.5 M 24 次郎 172.8 75.0 M 25 花子 159.0 56.5 F 22
このようなデータフレームをExcelのような画面で閲覧・編集する fix()
という関数があります:
> X = fix(X) # Xを編集し,結果をXに上書きする
ただしRStudioではこの機能は(まだ)使えません。
例えば c(3,4,5,6)
は 3:6
と書けます。また,c(3,5,7,9)
は seq(3,9,2)
のように始値,終値,増分を指定することもできます。
5段階のアンケート結果のように,1が2個,2が3個,…といったデータを入れるには,次のように rep()
を使うのが簡単です。
> x = rep(1:5, c(2,3,4,3,2)) # 1,2,3,4,5がそれぞれ2,3,4,3,2個 > x [1] 1 1 2 2 2 3 3 3 3 4 4 4 5 5 > y = rep(1:5, c(0,2,4,5,3)) > y [1] 2 2 3 3 3 3 4 4 4 4 4 5 5 5 > table(x) # 見やすい表にして表示 x 1 2 3 4 5 2 3 4 3 2 > t.test(x,y) # t検定をする
データフレームの読み込み(RStudio)
データがある程度の量になると,Rに直接入力するより,あらかじめExcelやテキストエディタに打ち込んでからRに読み込ませるのが楽です。
例えばExcelに次のように打ち込んであるとしましょう:
氏名 | 身長 | 体重 | 性別 |
---|---|---|---|
太郎 | 168.5 | 69.5 | M |
二郎 | 172.8 | 75.0 | M |
花子 | 159.0 | 56.5 | F |
まずこれをCSV(カンマ区切り)形式(*.csv
)またはテキスト(タブ区切り)形式(*.txt
)で保存します。ファイル名の拡張子を除いた部分はデータの名前とします(半角英字で始まる英数字にしておくのが無難です)。ここでは data1.csv
という名前にしましょう。
これをRStudioの右上ペインの「Import Dataset」→「From Text File...」で読み込みます。
左上ペインに現れるデータのプレビューは日本語の部分が文字化けしていますが,データとしては正しく読まれています。左下のRコンソールに data1
と打ち込んで正しく表示されることを確認してください。
RStudioの「Import Dataset」はURLを指定してWeb上のファイルを読み込むこともできます。
WindowsのRStudioではプレビューの文字化けを防ぐ方法はなさそうです。Macではデータファイルの文字コードをUTF-8にすれば化けないようです。
読み込んだデータはデータフレームになります。data1
の中の 身長
を参照するには data1$身長
のように書きます。この data1$
の部分を省略したい場合は,attach(データ名)
というコマンドを使います。逆は detach(データ名)
です。
データのコピー&ペースト
ちょっとしたデータの並びをRに読み込ませるには,コピー&ペースト(クリップボード経由)が便利です。コピー元はExcelでもPDFでもWebブラウザでも何でもかまいませんが,余計な区切り文字が入っていないほうが楽です。例えば
123 456 789
または
123 456 789
を範囲選択してクリップボードにコピーして,WindowsならRコンソールに
x = scan("clipboard")
と打ち込めばデータのベクトルが x
に代入されます。Macなら
x = scan(pipe("pbpaste"))
です。
データフレームの場合は read.table()
を使います。例えば
身長 体重 性別 太郎 168.5 69.5 M 二郎 172.8 75.0 M 花子 159.0 56.5 F
をコピーし,WindowsならRで次のように打ち込みます:
X = read.table("clipboard")
Macで clipboard
を指定すると,X11(X Window System)のクリップボードを読もうとします。通常のMacのクリップボードを読み込むには
> X = read.table(pipe("pbpaste"))
とします。
コピーされた範囲の最後に改行が含まれないと「不完全な最終行」云々という警告が出ることがありますが,気にしなくてかまいません。
上で使った表は,1行目の要素数が2行目以下の要素数より一つ少なくなっています。これに対して,次の表は,どの行も要素数が同じです。
どのように私は、破損したファイルを削除するには
身長 体重 性別 168.5 69.5 M 172.8 75.0 M 159.0 56.5 F
この場合には,最初の行がヘッダ(列名)であることを示すために,次のように header=TRUE
を指定する必要があります。
> X = read.table("clipboard", header=TRUE)
行の名前はデフォルトの 1
, 2
, ... が付きます。
列の名前がうまく付かなかったなら,次のようにして付け直すことができます。
> names(X) # 列の名前を調べる [1] "V1" "V2" "V3" # あれ,うまく付いていない! > names(X) = c("身長","体重","性別") # 付け直し
ファイルへの読み書き
データを
身長 体重 性別 太郎 168.5 69.5 M 二郎 172.8 75.0 M 花子 159.0 56.5 F
のような形式で書き込んだテキストファイルがあったとします。
テキストファイルは,こんなにきれいに縦に揃える必要はありません。少なくとも1個の半角スペースかタブで区切られていればいいのです。全角スペースは区切りの意味を持ちません。行頭・行末の半角スペース・タブは無視されます。各行の最後では必ずEnterを打ちます(最後の「花子」の行の最後にもEnterは本来必要です)。
Rの作業ディレクトリにあるファイルは,単にファイル名だけ与えます:
> X = read.table("test.txt")
一般の場所にあるファイルは,絶対パスまたは作業ディレクトリからの相対パスで指定します。Windowsではパスの区切りは /
または \\
とします。
> X = read.table("D:/work/test.txt") # 絶対パス指定で読む場合 (Windows)
作業ディレクトリはRのメニューで指定できます。コマンドでは getwd()
で調べ,setwd("...")
で変更できます。
ファイル名の代わりにURLを指定すれば,ネットからデータを読み込むことができます。
> X = read.table("http://oku.edu.mie-u.ac.jp/~okumura/R/test.txt")
文字化けする場合はエンコーディングを指定します。UTF-8環境でWindowsのファイルを読むには CP932
を指定すればいいでしょう。SJIS
ではいわゆる機種依存文字がうまく読めないことがあります。
> X = read.table("...", fileEncoding="CP932") # またはUTF-8またはUCS-2LEなど
データフレームを読む主な関数には次のものがあります:
read.table()
- 一つ以上の半角スペースまたはタブで区切ったデータを読みます。
read.delim()
- 一つのタブで区切ったデータを読みます。
read.csv()
- 一つの半角コンマで区切ったデータを読みます。このようなファイルをCSVファイルといいます。CSVはcomma-separated values(コンマ区切りの値)の略です。
データフレームでない単なる数値やベクトルを読む関数は scan()
です。
データをファイルに書き出す主な関数には次のものがあります:
write.table()
- 一つの半角スペースで区切ったデータを書き出します。
write.csv()
- 一つの半角コンマで区切ったデータ(CSV)を書き出します。
お薦めはCSVです。さきほどのデータをCSV形式で出力してみましょう。
> write.csv(X, "test.csv") # デフォルト > write.csv(X, "test.csv", fileEncoding="SJIS", eol="\r\n") # SJIS,Windows行末
デフォルトUTF-8なMacやLinuxでWindowsのメモ帳やExcelを想定したCSVファイルを作るには,上の例のように文字コードをSJIS(シフトJIS)にし,行末文字(eol
,end-of-line characters)を \r\n
(CRLF)にします。こうして .csv
で終わるファイル名にしておけば,Windowsの人がダブルクリックすればExcelで開きます。
行の名前を保存する必要がないときは次のようにします。
> write.csv(X, "test.csv", row.names=FALSE)
保存されたファイルを見てわかるように,数値以外は "文字列"
のように半角のダブルクォーテーションで囲んで保存されます。
Macでは write.table(X, pipe("pbcopy","w"))
とすると X
の内容をクリップボード(pasteboard)に書き込めます。/usr/bin/pbcopy
,/usr/bin/pbpaste
はMacのターミナルで使える便利なコマンドで,それぞれ標準入力をクリップボードにコピー,クリップボードを標準出力にペーストします。
図の描き方
特にMacで日本語を含む図を描くときは,適切なR初期化ファイル ~/.Rprofile を設定しておくのがベストです。あるいは,日本語フォントを指定するコマンド,例えば
> par(family="HiraKakuProN-W3")
を打ち込んでおきます。Osaka
,HiraMinProN-W3
,HiraMinProN-W6
,HiraKakuProN-W3
,HiraKakuProN-W6
,HiraMaruProN-W4
などが使えます。Hira
の付くのはヒラギノフォントで,Min
は明朝,Kaku
は角ゴシック,Maru
は丸ゴシック,W
の後の数字は大きいほど線が太くなります。古いMac OS Xの場合は ProN
がないので Pro
にします。
正規分布の密度関数 dnorm(x)
のグラフを描いてみましょう。曲線を描く関数 curve()
を使います。x の範囲(xlim
)や y の範囲(ylim
)は指定しなければ適当に判断してくれますが,ここでは x の範囲だけ -3 ≦ x ≦ 3 と指定して描くことにします。
> curve(dnorm(x), xlim=c(-3,3))
日本語でメインタイトル(main
)を書き加えてみましょう。
> curve(dnorm(x), xlim=c(-3,3), main="正規分布")
線の太さ lwd
をデフォルトの1から2に変更してみます:
> curve(dnorm(x), xlim=c(-3,3), main="正規分布", lwd=2)
同じ座標軸にさらに曲線を書き加えるときは add=TRUE
を指定します。たとえば自由度1の t 分布の密度関数を書き加えてみます:
> curve(dt(x,1), lwd=2, lty=2, col="red", add=TRUE)
上では線の太さ lwd
以外に線のタイプ lty
と色 col
を指定しました。色は "red"
のような色名(colors()
でリストが出ます)や,"#FFCCCC"
のような16進RGB指定ができます。モノクロ印刷の場合は gray()
関数で指定するのが便利です。この引数は 0 ≦ x ≦ 1 のグレースケールで,gray(0)
が黒,gray(1)
が白です。
このほか,任意の位置に文字列を出力する text()
,任意の線分を描く lines()
,点を描く points()
,多角形を描く polygon()
を使えば複雑な図形も描けます。
図のためのウィンドウには「2」から始まるデバイス番号が付きます。ウィンドウをもう一つ開くには,
> dev.new()
と打ち込みます。デバイス番号「3」のウィンドウが開き,アクティブになります。グラフを描くコマンドの出力は,アクティブなデバイスに描かれます。例えば2番のデバイスをアクティブにするには
"ゲーム:金属疲労"
> dev.set(2)
のようにします。アクティブなデバイスを閉じるには dev.off()
と打ち込みます。すべてのデバイスを閉じるには graphics.off()
です。
アクティブな描画デバイスの図を例えば zu1
というオブジェクトに保存するには
> zu1 = recordPlot()
と打ち込みます。保存した図を再生するには
> replayPlot(zu1)
のようにします。
こうして描いた図をワープロソフトなどに取り込むには,Windows版であれば「ファイル」→「クリップボードにコピー」→「メタファイル」でコピーして,ワープロソフトに貼り付けます。Mac版でも同様に「コピー」→「ペースト」できます。
PDFなどの形式で保存するには,Windows版であれば図の「ファイル」メニューから保存,Mac版であれば図が前面に出ている(アクティブになっている)状態で「ファイル」メニューから保存します。MacではOSの機能(Quartz)を使ってPDFに変換するので,フォントが埋め込まれた見た目通りのPDFができますが,Windowsでは日本語の部分が化けてしまいます。これを防ぐには,Windowsではあらかじめ
> par(family="Japan1GothicBBB") # または Japan1Ryumin
と打ち込んでから描画してください(警告が出ますが無視します)。フォントは埋め込まれずGothicBBB-Mediumなどの名前参照だけになります(WindowsのAdobe Readerでは小塚ゴシックなどで表示されます)。
Macでもフォントを埋め込まないPDFを作りたいなら,とりあえず画面に表示してから,
> dev.copy2pdf(file="hoge.pdf") # PDFに出力したい場合 > dev.copy2eps(file="hoge.eps") # EPSに出力したい場合
のように打ち込むという手があります。日本語の場合は family
を Japan1GothicBBB
などにしておかないとうまく出力できません。詳しくは dev.copy2pdf()
,dev.copy2eps()
のヘルプを見てください。
コマンドだけでPDFを出力する
グラフィックの使えない端末でもできる方法です。まず pdf()
でファイル名などを指定し,図を描き終わったら,dev.off()
でファイルを閉じます。幅・高さはインチ単位で指定します。
> pdf("hoge.pdf", width=7, height=5, family="Japan1GothicBBB") > curve(...) # 図を描く > dev.off() # ファイルを閉じる
フォント指定は,あらかじめ
> pdf.options(family="Japan1GothicBBB")
と打ち込んでおくこともできます。フォントファミリ family
は,デフォルトではサンセリフ系の標準的な欧文フォント Helvetica
にセットされています。これを日本語フォントにするには,明朝系なら Japan1Ryumin
,ゴシック系なら Japan1GothicBBB
を指定するのが一般的です。これらはそれぞれRyumin-Light,GothicBBB-Mediumというフォント名になりますが,Rは通常はPDFやPSにフォントを埋め込みませんので,出力デバイスにこれらのフォントがなければ別のフォントで代替されます。
ただ,デフォルトのフォントファミリを日本語のものにすると,数字まで日本語のフォントになってしまいますので,さきほど pdf.options()
で日本語フォントを指定した場合は
> pdf.options(reset=TRUE)
で元に戻し,次のように title()
を使ってタイトルだけ別に出力するほうが美しくなります。
pdf("hoge.pdf") curve(...) # ここではタイトルを出力しない title(main="正規分布", family="Japan1GothicBBB", font.main=1) dev.off()
title()
の font.main
などや,text()
の font
は,フォント名ではなく,1が標準,2がボールド,3がイタリック,4がボールドイタリックを表します。日本語フォントの場合は1を選ぶのが無難です。
MacではOSの機能(Quartz)を使ってコマンドでPDF出力することもできます。こちらのほうがきれいにできます。
quartz(type="pdf", width=7, height=5, file="hoge.pdf") # 単位:インチ par(family="HiraKakuProN-W3") par(mgp=c(2,0.8,0)) curve(dnorm(x), xlim=c(-3,3), main="正規分布", lwd=2) dev.off()
コマンドだけでEPSを出力する
次のように setEPS()
と打ち込んでから postscript()
コマンドでファイル名(とフォント)を指定し,図を出力します。
setEPS() postscript("hoge.eps", family="Japan1GothicBBB") curve(...) # 図を描く dev.off() # ファイルを閉じる
印刷目的の場合は,あらかじめ ps.options()
コマンドで colormodel
(色モデル)を gray
(グレースケール)または cmyk
(CMYKプロセスカラー)にしておくほうが安全です:
ps.options(colormodel="gray") # or "cmyk" or "rgb"
コマンドだけでPNGやJPEGを出力する
関数 png()
や jpeg()
が用意されています。Webで自動処理でグラフを提供するにはPNGがお薦めです。X11やcairo-develがインストールされたLinuxサーバでRをビルドした場合,cairo
デバイスを使うのがいいでしょう(Macなら quartz
デバイスも使えます)。
png("hoge.png", width=640, height=480, type="cairo") ... dev.off()
EPSやPDFをLaTeXに挿入する
EPSやPDFはたとえば次のようにしてLaTeX文書に挿入できます。
\documentclass{jsarticle} \usepackage[dvipdfmx]{graphicx} \begin{document} ... \includegraphics[width=10cm]{hoge.pdf} ... \end{document}
これで platex
で処理し,dvipdfmx
でPDF化します。
余白(マージン)が大きすぎるようなら,par()
で mar
パラメータを適当に設定します。下・左・上・右の順に並べます。
> par(mar=c(4.2,4.1,0.4,0.5))
あるいはLaTeX側で trim
を使ってトリミングすることも可能です。こちらは左・下・右・上の順に1/72インチ単位で指定します。
\includegraphics[width=10cm,trim=125 130 150 150]{hoge.pdf}
細かいこと
Rのコマンドは行末で区切られますが,;
(セミコロン)で区切ることもできます。
a = 5 + 3; b = 5 - 3
は
a = 5 + 3 b = 5 - 3
と同じ意味です。
数値は 3
と書いても 3.0
と書いても倍精度実数として扱われます。3+0i
は複素数 3 + 0i になります。値の型は typeof()
関数で調べられます:
> typeof(3) [1] "double" > typeof(3.0) [1] "double" > typeof(3+0i) [1] "complex"
Rでは「3.14」のような一つの値も長さ1のベクトルです。ベクトルの型はどの要素も同じです。
> typeof(c(1,2,3)) [1] "double" > typeof(c(1,2,"a")) [1] "character" > c(1,2,"a") [1] "1" "2" "a"
演算はベクトルの要素ごとに行われます。長さが違う場合は,長い方に合わせて,短い方を何度も使います:
> 1:6 + c(10,100) [1] 11 102 13 104 15 106
代入(付値)は,昔は x <- 5
のような書き方が専ら使われてきましたが,今では x = 5
という書き方も使えます。このサイトでは代入に =
を使っています。
> x = 1 # xに1を代入 > x <- 1 # xに1を代入 > x<-1 # xに1を代入 > x < -1 # xが-1より小さいか
条件判断で
if (a < -1) n = 1 else y = 2
を
if (a <-1) n = 1 else y = 2
と書くと a
に1を代入してしまいます。なお,これと同じことを
ifelse(a < -1, n <- 1, y <- 2)
または
ifelse(a < -1, {n = 1}, {y = 2})
と書くことができますが,
ifelse(a < -1, n = 1, y = 2)
と書くと,関数 ifelse(test, yes, no)
の仮引数 no
に 1 を代入し,yes
に 2 を代入するという意味になってしまいます。関数の引数リストの中で仮引数以外の変数に代入する際には注意が必要です。
ESS(Emacsの中のR)で _
を打つと <-
が入ります。2度続けて _
を打つと _
に戻ります。これがややこしければEmacsの初期設定ファイルに (ess-toggle-underscore nil)
と書いておきます。
ライブラリとサンプルデータ
Rにはたくさんのライブラリが用意されています。ライブラリの管理は,Windowsでは「パッケージ」メニュー,Macでは「パッケージとデータ」メニューを使うのが便利ですが,以下ではコマンドで行う方法を説明します。
インストールされているすべてのパッケージは library()
と打ち込むと表示されます。この中で,例えば MASS
というパッケージは"Main Package of Venables and Ripley's MASS"と説明されています。これは Modern Applied Statistics with S-PLUS という本(頭文字からMASSと略称する)で解説されているパッケージです。
現在読み込まれているパッケージは search()
でリストされます。
> search() [1] ".GlobalEnv" "package:stats" "package:graphics" [4] "package:grDevices" "package:utils" "package:datasets" [7] "package:methods" "Autoloads" "package:base"
この中に MASS
はありませんので,読み込んでみましょう。それには
> library(MASS)
と打ち込みます。念のため search()
と打ち込むと "package:MASS" が一覧に加わります。
library()
でリストされるのはR標準のものだけです。これ以外に無数のパッケージがCRANサイトで公開されています。パッケージをインストールする前に,すでにインストールされているパッケージを念のため最新の状態に更新しておきましょう。次のコマンドは,統計数理研究所のCRANミラーを使ってパッケージを更新・インストールします(パッケージ名にはダブルクォートを付けます)。
options(repos="http://cran.ism.ac.jp") update.packages() install.packages("パッケージ名")
こうしてから
library(パッケージ名)
と打ち込みます(今度はダブルクォートは不要です)。
パッケージにはたくさんのサンプルデータが含まれているものがあります。
> data()
と打ち込むと,現在読み込まれているデータ一覧が表示されます。Macなら「パッケージとデータ」メニューからデータマネージャを呼び出すほうが簡単です。
プログラムの作成・読み込み・実行
ひとまとまりの処理をするプログラム(Rソース)を作ったなら,それを拡張子 R
のテキストファイル(例:hoge.R
)に保存しておくと便利です。
hoge.R
を読み込むには次の方法があります:
hoge.R
をテキストエディタで開いてRコンソールにコピー&ペーストする。- Rコンソールで
source("hoge.R")
と打ち込む。保存場所によっては相対パス・フルパスを与える必要がある(次の「システムに依存する細かいこと」参照)。 - Rの「ファイル」→「Rコードのソースを読み込み…」(Macでは「ソースを読み込む…」)で
hoge.R
を読み込む。
Rソースは読み込むとすぐ実行されます。
Rソース中でデータファイルを読み込む必要があるところでは,ユーザが指定できるように,
filename = file.choose() data = read.csv(filename)
のようにすると便利です。WindowsやMacのGUIではファイルを選択するダイアログボックスが現れます。テキスト端末では「Enter file name:」と聞いてくるだけです。
システムに依存する細かいこと
Windowsではインストール時に指定した場所(例えば C:\Program Files\R あるいは C:\Users\ユーザ名\Documents\R など)の下にすべてのファイルが入ります。リロケータブルですので,USBメモリなどにインストールして持ち運ぶこともできます。Rgui.exe のショートカットのプロパティの「作業フォルダ」を設定することによって,Rの作業ディレクトリを設定できます。
Macでは /Applications/R.app と /Library/Frameworks/R.framework にインストールされます。また,自分用のライブラリの場所として ~/Library/R が確保されます。起動してから作業ディレクトリなどの設定ができますし,ターミナルから
open -a R .
と打ち込めば,カレントディレクトリがRの作業ディレクトリになります。UNIX版のようにターミナル上で使うには,/Library/Frameworks/R.framework/Resources/R のシンボリックリンクをパスの通ったところに作成しておけば,R
と打ち込むだけで起動します。
UNIX系OSで自分でコンパイルした場合,デフォルトでは /usr/local/bin と /usr/local/lib/R,マニュアルが /usr/local/share/man/man1 に入ります。/usr/local の部分は自由に変えられますので,~/bin などに変えるのもいいでしょう。
どのシステムでも,デフォルトでは起動時に作業ディレクトリの作業スペース .RData
と履歴 .Rhistory
を読み込みます。プロジェクトごとに異なる作業ディレクトリを指定すれば,作業スペースに保存された作業内容が継続利用できます。履歴が残らない場合は設定項目を調べてください。
作業スペースに保存されたオブジェクトを一覧するには ls()
コマンドを使います(ls は list の略です)。オブジェクトを消すには rm()
コマンドを使います(rm は remove の略です)。
> ls() character(0) # 「何もない」という意味 > x = 3; y = 5; z = 7 > ls() [1] "x" "y" "z" > rm(x, z) > ls() [1] "y" > rm(list = ls()) # すべてを消す(注意!) > ls() character(0) # すべて消えた
消す前にオブジェクトをファイルに保存したいときは save()
を使います。
> save(X, Y, file="xy.RData")
すべてのオブジェクトを保存するのは,終了のときに作業スペースを保存すると答えればいいのですが,終了せずに保存だけするには save.image()
と打ち込みます。デフォルトでは作業ディレクトリの .RData
というファイルに入りますが,ファイル名を指定することもできます:
> save.image(file="2008-12-23.RData")
Rをバッチ動作させることができます。長時間を要する計算をサーバ機のバックグラウンドで実行するのに便利です。環境変数 LANG=ja_JP.UTF8
がセットされていないと日本語がうまく扱えないかもしれません。
nohup R CMD BATCH hoge.R &
出力は hoge.Rout
にされます。
奥村晴彦
Last modified: 2012-03-22 13:38:39
0 コメント:
コメントを投稿