Heavy Watal

R自学自習の基礎知識

インターネットで調べる

RStudioを使う

Rの実行方法はいくつかあるが、これから始めるひとは RStudio を使うとよい。

スクリプトを保存

R のコンソールにコマンドを打ち込むと、即座に結果が返ってくる。 一度きりで済む短い処理ならそのように対話的な方法が分かりやすいかもしれないが、 別のデータにも使い回すとか、タイプミスでやり直すとか、 同じような処理を何度か繰り返す場合には(大抵はそうなる)、 一連の処理をまとめてスクリプト(テキストファイル)に書き出しておくとよい。 ファイルの拡張子は .txt でも何でもいいが .R にすることが多い。

R Markdown を使えばコードと解析結果の図表を同時に保存・プレゼンすることができる。

パッケージ

便利な関数やサンプルデータなどをひとまとめにしたもの。 R開発チームが公式に作ってるものから、 ユーザーが自分用に作ってアップロードしたものまで、さまざまある。 自分でやろうとしてることは既に誰かがやってくれてる可能性が高いので、 車輪の再発明をする前に、まずは既存のパッケージを調べるべし。 プログラミングは、イチから「書く」のではなく、 既存のパーツを利用して「組む」感覚のほうが近い。

Standard Packages

https://stat.ethz.ch/R-manual/R-devel/doc/html/packages.html

R の標準機能。 何もしなくても使用可能な状態になっているので、 パッケージであることはあまり意識しなくてもいい。

base
c(), data.frame(), sum() などホントに基本的なもの
graphics, grDevices, grid
plot() などグラフ描画関連
stats
anova(), glm(), t.test() など統計解析関連
utils
help(), install.packages(), read.table() など

ほかに compiler, datasets, methods, parallel, splines, stats4, tcltk, tools

R と一緒にインストールされるが、 使用する前に library() で呼び出しておく必要があるパッケージ。

例えば MASS に入ってる stepAIC() を使うには

> stepAIC(model)
Error: could not find function "stepAIC"
> library(MASS)
> stepAIC(model)  # OK

ほかに boot, class, cluster, codetools, foreign, KernSmooth, lattice, Matrix, mgcv, nlme, nnet, rpart, spatial, survival

Contributed Packages

数千ものパッケージが有志により開発され、CRANにまとめて公開されている。

例えば rstudio.com/products/rpackages で紹介されているもの、特にHadley Wickhamらによる tidyverse パッケージ群 (ggplot2, dplyr, purrr, tidyr, readr, stringrなど) はどんな解析にも有用で、標準になってもいいくらい便利。 というより、tidyverseなき裸のRは使う気が起きない。 Rの中から下記のようなコマンドで一括インストール・読み込みできる。

> install.packages('tidyverse')
> library(tidyverse)

そのほか https://cran.r-project.org/web/views/ で用途別に紹介されている。

パッケージを作るには devtools を使う。

作業ディレクトリ

R ではどこかのディレクトリ (= フォルダ) に身をおいて作業する。 ファイルを開くときなどに R がファイルを探すのはこの作業ディレクトリである。 No such file or directory と怒られる場合は、 作業ディレクトリとファイルの場所が合っていないかったり、 ファイル名のタイプミスだったりすることが多い。

getwd(), setwd()

現在地の working directory を get/set する関数

> getwd()
[1] /Users/watal
> setwd("~/Desktop")
> getwd()
[1] /Users/watal/Desktop
list.files(path = ".", ...) または dir(path = ".", ...)

ディレクトリ内のファイルを列挙する関数。 path を省略するとワーキングディレクトリが対象となる

> read.table("mydata.txt", header=TRUE)
Warning in file(file, "rt") :
  cannot open file 'mydata.txt': No such file or directory
Error in file(file, "rt") : cannot open the connection
> list.files()
[1] mydate.txt
# ファイル名が微妙に違う!!

R で調べる

help(topic, package=NULL, ...)

ヘルプを表示する。 知りたいオブジェクトの先頭にクエスチョンマークを付けるという方法もある。 以下の2つは等価

> help(sum)
> ?sum
help.start()

組み込みヘルプをウェブブラウザで開く。 インストール済みパッケージのヘルプも Packages のリンクから見られる。

attributes(obj), str(obj)

オブジェクトの属性や構造を調べる。 $names に列挙されてる属性はダラー $ を挟んで取り出せる

> x = rnorm(100)
> y = rnorm(100)
> mymodel = lm(y ~ x)
> attributes(mymodel)
$names
 [1] "coefficients"  "residuals"     "effects"       "rank"
 [5] "fitted.values" "assign"        "qr"            "df.residual"
 [9] "xlevels"       "call"          "terms"         "model"

$class
[1] "lm"
>
> mymodel$coefficients
(Intercept)           x
 -0.1494812   0.1218096
>
> str(mymodel)
List of 12
 $ coefficients : Named num [1:2] -0.171 -0.198
  ..- attr(*, "names")= chr [1:2] "(Intercept)" "x"
 $ residuals    : Named num [1:100] -0.5143 -1.3148 0.1954 1.6039 -0.0875 ...
  ..- attr(*, "names")= chr [1:100] "1" "2" "3" "4" ...
 $ effects      : Named num [1:100] 1.2027 2.0571 0.1179 1.8384 -0.0946 ...
  ..- attr(*, "names")= chr [1:100] "(Intercept)" "x" "" "" ...

データ読み込み

See readr

データ処理・整形

See dplyr, purrr, and tidyr

グラフ作図

2D: See ggplot2

3D: See rgl

関連書籍

Rのモダンな使い方、考え方。 まずは公開オンライン版を読んでみて。

古典的な仮説検定から一般化線形モデル・階層ベイズモデルくらいまでならこのへんで: