「Rの基本操作」の編集履歴(バックアップ)一覧はこちら
「Rの基本操作」(2009/09/29 (火) 18:24:53) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
* 基本操作
** Rの起動と基本操作
インストールして作成されたRgui.exeなどを実行すると新しくウィンドウが開き(コマンドプロンプトなどから実行した場合は別です),次のような文章が表示されます.
>|r|
R version 2.9.1 (2009-06-26)
Copyright (C) 2009 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
R はフリーソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()' あるいは'licence()' と入力してください。
R は多くの貢献者による共同プロジェクトです。
詳しくは'contributors()' と入力してください。
また、R やR のパッケージを出版物で引用する際の形式については
'citation()' と入力してください。
'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' でHTML ブラウザによるヘルプがみられます。
'q()' と入力すればR を終了します。
>
||<
* 基本操作
** Rの起動と基本操作
インストールして作成されたRgui.exeなどを実行すると新しくウィンドウが開き(コマンドプロンプトなどから実行した場合は別です),次のような文章が表示されます.
>||
R version 2.9.1 (2009-06-26)
Copyright (C) 2009 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
R はフリーソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()' あるいは'licence()' と入力してください。
R は多くの貢献者による共同プロジェクトです。
詳しくは'contributors()' と入力してください。
また、R やR のパッケージを出版物で引用する際の形式については
'citation()' と入力してください。
'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' でHTML ブラウザによるヘルプがみられます。
'q()' と入力すればR を終了します。
>
||<
最後の行に表示されている">"はここに命令をしろという記号で,一般にこのようなものをプロンプトと呼びます.">"以降にコマンドを入力し,Enterキーを叩くことでRは命令を実行します.
** 四則演算
>||
> 1 + 3
[1] 4
> 8 - 6
[1] 2
> 2 * 5
[1] 10
> 4 / 2
[1] 2
||<
ここで">"はプロンプトを表しているため入力する必要はありません.出力結果の頭には[1]という数字が付いています.これは[1]の右に表示されているデータが出力結果のうち何番目の出力であるのかを示しています.出力が複数あって1行に表示しきれない場合,Rはこれを適当に改行し,[]を付けて表示してくれます.
>||
> 1:20
[1] 1 2 3 4 5 6 7 8 9 10 11
[12] 12 13 14 15 16 17 18 19 20
||<
いま実行したのは連続した数値ベクトルを作成する命令です.後述します.
このように,Rでは入力された命令が即座に解釈され,結果が返ってきます.文字として出力可能なものであれば上のように出力されます(出力先はテキストファイルなどに変更することもできます).
また,基本の四則演算以外にも,べき乗,商,余りなども演算子により計算できます.
>||
> 2^10 # べき乗
[1] 1024
> 17 %/% 3 # 商
[1] 5
> 17 %% 3 # 余り
[1] 2
||<
ここで"#"はコメントを開始する合図です.コメントは命令の実行時には無視されます.コメントは#から改行まで続きます.Rに直接命令を渡す場合はあまり有難味がありませんが,Rの命令はテキストファイルにまとめて書いておいて実行するということがよくあります.そのような場合,あとで見返しても用意に理解できるようにするため書き込むのがコメントです.未来の自分は他人と思い,なるべくまめに丁寧に書くようにしましょう.
** 関数
基本の算術演算よりも複雑な計算をしたり,あるいはグラフを描いたりするのには関数を利用します.Rにおける関数の利用法はExcelなどの表計算ソフトにおける関数の利用方法とほとんど同じで,"関数名(引数1, 引数2, 引数3...)"のように関数名に続いて引数をカンマで区切って指定して利用します.試しに1, 2, 3, 4, 5の5つの数の平均値,分散(不偏分散),標準偏差を計算してみます.
>||
> mean(c(1,2,3,4,5)) # 平均値はmean()
[1] 3
> var(c(1,2,3,4,5)) # 不偏分散はvar()
[1] 2.5
> sd(c(1,2,3,4,5)) # 標準偏差はsd()
[1] 1.581139
||<
すぐあとで説明しますが,c()というのも関数で,複数の数値を1つにまとめる働きがあります.つまり,関数は入れ子にすることも可能です.
Rには膨大な量の関数が用意されています.これらを全て覚えて利用することはあまり現実的ではありません.ですから,頻繁にhelpを参照することになります.helpを参照するためには?もしくはhelp()を利用します.例えば上記mean()関数の利用法を調べるには以下のように入力します
>||
?mean
help(mean)
||<
設定にもよりますが,普通にWindowsへインストールした場合は別Windowが開いてヘルプが表示されると思います.また,用意されている場合に限りますがexample(mean)などとするとその関数の利用例が表示されます.
** データセットの作り方
*** ベクトルと代入
Rではベクトルという単位を基本としてデータを扱う場合が多くあります.ベクトルは,単に数値,文字,論理値(TRUE, FALSE)などが並んだものと思えば良いでしょう.なお,Rの場合はデータが1つだけでも2つ以上でもベクトルです.
ベクトルはc()関数によって作成するのが最も基本的なやり方です.
>||
> c(1, 2, 3, 4, 5)
[1] 1 2 3 4 5
||<
c()の中に引数としてカンマで与えられた数値,文字などがベクトルとしてまとめられ,出力されます.上述したようにRでは1つだけの数値や文字もベクトル扱いです.つまり,上の例の引数はそもそもベクトルですから,長さ1以外のベクトルを与えてc(1, 2, c(3, 4))の様に入れ子にすることも当然可能です.
数値の他には文字(列)型,複素数型,論理型,NULLなどがデータ型としてありますが,型は統一している必要はなく,混ぜて記述することができます.ただし,その場合はより表現力の高い型に変換され統一されます.
>||
> c("a", "b", "c") # 文字列は""で括る
[1] "a" "b" "c"
> c("カツ丼", "天丼", 24) # 24 は数値型だが変換される
[1] "カツ丼" "天丼" "24"
||<
また,先程も使用しましたが":"という記号を使うと連続した数値ベクトルを簡単に作成できます.
>||
> 1:10
[1] 1 2 3 4 5 6 7 8 9 10
> 5:3
[1] 5 4 3
> -3:1
[1] -3 -2 -1 0 1
||<
この他にも特定のパターンを持ったベクトルを作成する関数が色々と用意されていますが,まずはc()と:を使う2つの方法を覚えておきましょう.特に連続した数値ベクトルは繰り返しのカウントなどによく使います.
ベクトルを含めRにより作成されたデータなどは全てオブジェクトと呼ばれます.作成したオブジェクトを後で利用できるようにするためには,変数への代入という操作を行います.代入により変数名がオブジェクトの変わりとして利用することができるようになります.今後,代入された変数をオブジェクトと同一視し,変数のことをオブジェクトと呼ぶ場合が出てくると思います.
>||
> x <- 1:5 # オブジェクトの代入
> x # 代入によりオブジェクトを後から変数名で呼ぶことができるようになる
[1] 1 2 3 4 5
||<
上記の例ではオブジェクトは1:5ですが,「xというオブジェクトを作成した」「オブジェクトxを~」などという説明をする場合が(このWebサイトに限らず)多々出てくると思うので注意して下さい.
作成されたベクトルは上記のように変数名を入力することで全体を呼び出すことができますが,特定の要素のみにアクセスしたい場合もあると思います.そのような場合には添字を用います.
>||
> x <- 10:1
> x # 変数を呼ぶと全て参照
[1] 10 9 8 7 6 5 4 3 2 1
> x[3] # 添字により特定の場所の要素にアクセス
[1] 8
> x[c(1, 3, 5)] # 添字にベクトルを与えることもできる
[1] 10 8 6
> x[-8] # -を付けるとその要素以外にアクセス
[1] 10 9 8 7 6 5 4 2 1
> x[x > 4] # 特定の条件を満たすものへのアクセス
[1] 10 9 8 7 6 5
||<
*** 比較
先程の添字の例で最後にx>4というものがありました.これを単独で実行すると次のような結果が返ってきます.
>||
> x > 4
[1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
||<
つまり,ベクトルxのなかでx>4という不等式を満たすものの位置にはTRUEが,満たさないものの位置にはFALSEが配置された論理型ベクトルが返ってきます.そして,添字として論理型ベクトルを与えた場合,TRUEの部分の要素を取り出すことができます.
比較のための演算子としては>, <, >=, <=, ==, =!があります.==は同一ならばTRUEを返す演算子で,=!は違っていればTRUEを返す演算子です.
ここで,演算子の左右のベクトルの長さ(要素数)が一緒ならばそれぞれ要素ごと,同じ位置にあるもの同士が比較されます.しかしもし両者の長さが違った場合(x > 4もその一例です),短かい方のベクトルが長い方のベクトルと同じ長さになるまで繰り返して利用されます.ここでもし短かい方のベクトルの長さが長い方のベクトルの整数倍でなかった場合は警告が出ます(計算自体はできます).
>||
> y <- c(2, 2, 2, 2, 2, 2)
> z <- 1:3
> y <= z
[1] FALSE TRUE TRUE FALSE TRUE TRUE
||<
*** 論理演算
比較と似たようなもので論理演算というものがあります.これは主に論理ベクトルを対象とした演算です.&演算子の働きを見てみましょう.
>||
> TRUE & TRUE # 両者がTRUEならTRUE
[1] TRUE
> TRUE & FALSE
[1] FALSE
> FALSE & FALSE
[1] FALSE
||<
論理演算は!, &, &&, |, ||, xor()といった演算子で行えます(xor()のみ関数なのに注意).
-!: !TRUEなどのように単項で用い,TRUEならFALSE,FALSEならTRUEを返す
-&: 両者がTRUEならTRUE(and)
-|: いずれかがTRUEならTRUE(or)
-xor(): 両者が異なればTRUE
&&と||は基本的に&,|と同じですが,1つの方がベクトルを与えた場合に全ての組で比較するのに対し,2つの方は最初の1要素(正しくは比較が成立した最初の組)のみを比較する点にあります.後者は確実に1つの要素のみが返ってきます.
*** データフレーム
Rが扱えるベクトル以外のデータ形式としては,データを2次元に並べた行列(matrix),3次元以上に並べた配列(array),異なる形式のオブジェクトをまとめたリスト(list)などがありますが,なかでも良く使うであろう形式にデータフレーム(dataframe)というものがあります.例えばExcelなどからデータを読み込む場合は大抵がデータフレームになります.
データフレームは複数のベクトルをまとめたもので,外見はExcelのデータシートのような2次元配列です.1つの列が1つのベクトルに対応し,ベクトル内での型は同じでないといけませんが列間の型は異なっていてもかまいません.データフレームはdata.farame()関数で作成します.
>||
> a <- 1:5
> b <- c(T, F, T, T, T) # TRUE,FALSE は省略して書ける
> c <- c("Abc", "def", "hoge", "huga", "白米")
> ## 代入操作と同時に出力もしたい場合は式を() で括る
> (my.dataframe <- data.frame(num = a, lo = b, name = c))
num lo name
1 1 TRUE Abc
2 2 FALSE def
3 3 TRUE hoge
4 4 TRUE huga
5 5 TRUE 白米
||<
上記のようにdata.frame(名前=変数名,...)といった具合に列に名前を付けられます.省略した場合は変数名が流用されます.データフレームの各ベクトルへのアクセスは,データフレーム$列名のように$を使うか,データフレーム[行番号,列番号]のように番地形式の添字を使います.番地形式の添字を使うとき,数字を空欄にしておくと全ての番号を選択したのと同じ意味になります.
>||
> my.dataframe$num
[1] 1 2 3 4 5
> my.dataframe[ ,1]
[1] 1 2 3 4 5
> my.dataframe[2, ]
num lo name
2 2 FALSE def
||<
*** 表計算ソフトからの取り込み
表計算ソフトで作成したデータを取り込む場合,csv形式にして取り込む,またはクリップボードを経由して取り込むという方法がよく採られます.csv形式のデータを取り込む場合,次のようにread.csv()関数を利用するのが楽です.
>||
> my.iris <- read.csv("iris.csv")
||<
このとき,引数にはファイルへのパスを与えます.現在のワーキングディレクトリにファイルがある場合は上のようにファイル名だけでアクセスできます.現在のワーキングディレクトリはgetwd()で調べられます.変更は同様にsetwd()です.Rguiの場合はメニューからも確認,変更ができます.
クリップボードを経由する場合,まずクリップボードに取り込みたい範囲をコピーし(つまり範囲を選択してCtrl+Cです),
>||
> my.iris2 <- read.delim("clipboard")
||<
と入力します.
このとき,文字列が含まれる場合は全て因子型と呼ばれる形式に変換されます.もし文字列が因子(実験区,品種など)を表しているのならそのままで大丈夫な場合が多いですが,因子ではなく測定結果だというような場合には文字列型にしておく方が良いでしょう.その場合,引数にstringsAsFactors=FALSEを指定します.
>||
> my.iris3 <- read.csv("iris.csv", stringsAsFactors=F)
||<
なお,上述の関数は全てread.tableという関数に適当な引数を設定したラッパです.詳しくはread.tableのhelpを参照して下さい.
** 統計量の計算
*** データフレームの概要を知る
実際のデータを元に統計量を計算してみます.サンプルデータとしてRに組み込みで用意されているirisというものを用います.irisと打ち込むだけでデータフレームが表示されますが,やや量が多いのでhead()という関数を使います.head()はデータの最初から数行だけを表示してくれる関数です.
>||
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
||<
またデータの最後から数行を表示するtail()という関数もあります.
summary()という関数を使うとデータを形式に合わせて適当に要約してくれます.
>||
> summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
||<
データフレームの中身を知りたい場合はhead()関数やsummary()関数を使うと良いでしょう.
*** データフレームに関数を使う
関数には与えられたオブジェクトの型を見て実際に使用する関数を判断してくれるものがあります.
mean, var, sdといった基本統計量を計算する関数もその1つです.
>||
> mean(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.843333 3.057333 3.758000 1.199333 NA
Warning message:
In mean.default(X[[5L]], ...) :
引数は数値でも論理値でもありません。NA 値を返します
> var(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Sepal.Length 0.68569351 -0.04243400 1.2743154 0.5162707 NA
Sepal.Width -0.04243400 0.18997942 -0.3296564 -0.1216394 NA
Petal.Length 1.27431544 -0.32965638 3.1162779 1.2956094 NA
Petal.Width 0.51627069 -0.12163937 1.2956094 0.5810063 NA
Species NA NA NA NA NA
Warning message:
In var(iris) : 強制変換により NA が生成されました
> sd(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
0.8280661 0.4358663 1.7652982 0.7622377 NA
Warning message:
In var(as.vector(x), na.rm = na.rm) : 強制変換により NA が生成されました
||<
このように与えられたオブジェクトにより実際に使われる関数が決定されるものは総称的(generic)な関数と呼ばれます.
** プロット
Rでは作図も関数により実行します.様々な関数が用意されていますが,基本はplot()関数による散布図です.ただしplot()もオブジェクトに応じて適当な形のプロットを実行します.
散布図を描くにはplot関数に1つ,もしくは対になった2つのベクトルを与えます.1つのベクトルを与えた場合にはx軸はindexになります.2つのベクトルを与えた場合,引数xに与えたものがx軸に,引数yに与えたものがy軸に対応します.
>||
> a <- c(1,3,5,4,2)
> b <- c(5,5,3,2,1)
> plot(a)
> plot(x=a, y=b)
> plot(a, b) # 引数名は順番さえ合っていれば省略できる
||<
プロットの出力結果は設定,プラットフォームにもよりますが,Windowsならば通常はR Graphicsという名前の新しいウィンドウが開いてそこに描画されるはずです.プロットの出力先をグラフィックデバイスと呼びます.グラフィックデバイスも関数により呼び出します.R Graphicsは規定で呼び出されますが,windows()関数を利用することで明示的に呼び出すこともできます.グラフィックデバイスにはwindows()のように画面に出力するもの以外に,png, jpeg, pdfなどに直接出力していくものがあります.このようなグラフィックデバイスは明示的にoffにすることで出力が停止し,以降の出力がデフォルトのデバイス(windows())に戻ります.デバイスを閉じるにはdev.off()関数を引数なしで(あるいはグラフィックデバイスの番号を指定することもできます)実行します.R Graphicsからもjpegなどに保存することはできますが,マウスで操作する必要がありますので状況に応じて使い分けましょう.なお,利用できるグラフィックデバイスの一覧は?deviceで参照できます.
プロットのための関数には他にもbarplot()(棒グラフ)やboxplot()(箱ひげ図)など様々なものがあります.また,プロット時のパラメータを設定するpar()関数というものもあります.詳しくはこれらのhelpを参照して下さい.