R(RStudio)を使う(2)

スクリプトの書き方について、簡単にまとめておきます。以降は、事前にRStudioでプロジェクトを作成しておくと、作ったファイルの管理が楽になります。

スクリプトファイル

スクリプトファイルには、Rのコマンドやコメントなどを書き連ねていきます。簡単のため、RStudioを使う場合に絞って説明します。

Rのスクリプトファイルには、いくつか種類がありますが、RStudioで、Sourceペインの表示に従って、「R Script」を表示させます。ここでファイル名をつけて保存しておいてください。

R Scriptの利用方法は至って簡単です。上から、実行する順にコマンドやコメントを書き連ねていくだけになります。実行したい行で、「Ctrl+Enter」とする(または「Run」ボタンを押す)と、コマンドがConsoleペインに送られ実行されます。

すでに記録してある全てのコマンドを実行する場合は、Sourceペインの右上にある「Sourceボタン」を押せば実行してくれます。これは、source()関数を用いたスクリプトファイルの実行ボタンになります。

上書き保存はRStudioの左上のボタンでもできますが、「Ctrl+S」で行う癖をつけておくと、保存し忘れることが減ります。

Rマークダウン

R Scriptではなく、「R Markdown」を選んだ場合、右図のようにアウトプットするレポートの種類を「HTML」、「PDF」、「Word」から選択する必要があります。最初は「HTML」か「Word」を選んでおきましょう(*)。「Word」を選択するためには、MS Word、またはOpen Office.orgなどが必要で、「PDF」を選択するためには、MiKTeXのインストールが必要になります。MS WordやOpen Office.orgはインストールされていることが多いと思います。

解析の結果は人に見せることが前提だと思いますので、ある程度試行錯誤をR Scriptで行った後は、Rマークダウンでスクリプトファイルを作成しておくと便利です。Rのコードと文章が一緒に記述でき、最初からレポートが提出可能な形式で出力されるからです。

*: 後から変更することは可能です。

Rマークダウンについて

上の図の画面で、「Word」を選んだ場合、右図のようなSourceファイルが自動で生成されます。ファイル上部の「---」に囲まれた部分は、YAMLヘッダと呼び、ファイル作成時に決めた情報が記述されます。また、この情報に基づいて、Wordファイル(やHTMLファイル、PDFファイル)が作成されます。まずは、何も考えずに、「Knit」ボタンを押してみてください。保存のためファイル名を求められますが、適当に入れてみて結構です。保存後、自動で文章とコード、結果、図が書かれているWordファイルが生成されれば成功です。YAMLヘッダの中身のうち、もっとも基本的なものを下に紹介しています。

title
タイトル
author
著者
date
日付
output
出力するフォーマット。「Knit」の横の▼をクリックすると変更できるが、PDFに出力するためには、MiKTeXのインストールが必要となる。

(特に日本語の)PDFへの出力をする場合は、このYAMLヘッダのカスタマイズが肝になります。それ以外であれば、特にいじらなくても、不都合はないと思います。出力の様子をカスタマイズしたい場合は、二通りの方法が用意されています。

設定ボタンから変更する

「Knit」ボタンの横にあるギアのボタンが設定ボタンです。クリックして、「Output Options」を選択すると、右図のようなウインドウが出てきますので、設定や出力を変更してみるといいでしょう。

「Word」に出力するときのオプション
General
目次の追加や、ハイライトのテーマの選択
Figures
縦・横の長さの指定(インチ)とキャプションを一緒にレンダリングルするかの選択
Advanced
マークダウンのソースファイルを残すかどうか

YAMLヘッダを直接編集する

こちらは少し癖がありますので、使い慣れてきてから扱うようにするといいでしょう。PDFへの出力に関して記述する際に、触れようと思います。

Rマークダウン V2の書き方

Rマークダウンを用いてスクリプトを書き、レポートを出力する時は、必ず「プロジェクト」を作成し、文字コードを「UTF-8」にするようにしてください。RStudioの設定(Global Options)で、先に文字コードは「UTF-8」に決めておくと後が楽になります。

Rのコマンド・コード

RのコードはChunkと呼ばれる「```{r}」と「```」で囲まれた領域に記述します。Chunkには名前をつけることができ、Sourceペインの左下から各Chunkにアクセスしやすいようになっています。また、さまざまなオプションが用意されており、レポートにコードを記述させたりさせなかったりが選べるようになっています。

```{r 名前, オプション, ...}

# Rのコマンド・コード・コメントを記述

```

最初に生成されている文章の最初のChunkには、「setup」という名前がつけられ、「include=FALSE」(実行するが実行結果を出力に入れない)というオプションが設定されているのがわかります。

Rのコマンド・コードの書き方自体は、特別なものではありません。普通に記述していただいて結構です。Chunkの閉じ忘れなどに注意しましょう。

Chunkのオプション

たくさんありますが、よく使うものだけ紹介しておきます。

echo = TRUE (or FALSE)
Rソースコードを出力に含めるかどうか。FALSEで結果のみ表示する。TRUE/FALSE以外に、echo = 2:4等とすると、2番目から4番目のソースのみ出力し、echo = -1等とすると1番目のソースを除外する。
warning = TRUE (or FALSE)
warnings関数による警告メッセージを含めるかどうか。warningが多くて見づらい場合はFALSEしてもいいかも。
eval = TRUE (or FALSE)
コードを評価するかどうか。FALSEの場合、コードを評価しないので、結果が表示されない。
fig.keep = 'high' (or 'none', 'all', 'first', 'last')
プロットをどのように保持するか。
  • all: 繰り返しで出力した図はfig.keep = 'all'で保持される。
  • high: high-levelプロットのみ保持する。
  • none: すべてのプロットを破棄する。
  • first: 最初のプロットのみ保持する。
  • last: 最後のプロットのみ保持する。
dev = 'png' (or 'win.metafile', 'pdf', 'jpeg'…)
どのファイル形式の図を作成するか
dpi = 72 (or 数値)
図の解像度の指定
results = 'markup' (or "markup", "asis", "hold", "hide")
結果をマークアップして出力する。
  • markup: 結果をHTMLにマークアップする。
  • asis: 結果をそのまま出力する。xtableなどで、HTMLの形式に整形しているときはこれを選択する。
  • hide: 結果を表示しない。

文章

文章はChunkのYAMLヘッダ以降、Chunkの外側に記述します。URLを表記するとリンクが出力ファイルでリンクが張られるなど、非常に便利になっています。

マークアップ

こちらもよく使うものだけ紹介しておきます。

見出し
見出し:#1つ~6つ。#が増えるたびに小さな見出しになる。
水平線の挿入(ページの分割)
---または***:HTMLでは水平線
項目を"|"で区切っていく。"----|"がないと、1行だけの表になるので、必要な列の数だけ、表題の下に"----|"を入れておく。表題はボールドで表示される。
表題|表題|表題|表題|
----|----|----|----|
項目|項目|項目|項目|
項目|項目|項目|項目|
引用
> 引用文
数式
$$の行と$$の行に囲まれたスペースに、LaTeXの文法に従って書く。
$$
数式
$$
インライン:$と$で囲み、LaTeXの文法に従って記述する。
リンク
URLをそのまま書くか、[リンク名](URL)のようにする。
強調
イタリック:*イタリック*、または_イタリック_
ボールド:**ボールド**、または__ボールド__
箇条書き
順序なし:* 項目
順序あり:数字 項目

Rマークダウンの例

# 私の研究

survey.csvに入力したデータを用いて、いろいろな解析を行ってみる。

## データの読み込み

データの読み込みを行う。

```{r reading}

dat <- read.csv("data/survey.csv")

summary(dat)

```

## データの図示

調査した村と身長の関係を図示する。

```{r plotting, fig.keep = 'all', dev = c('png', 'win.metafile')}

# 村ごとの身長の様子を図示

with(dat, plot(height ~ village))

```

上の例では、青い部分がRのChunkで、緑色の部分がレポートの文章になります。「#」はChunkの中と外で役割が変わります。Chunkの中では「#」はコメントで、Chunkの外側では見出しレベルのマークアップになります。

Rノートブック

R ScriptとRmarkdownの中間のようなもので、Chunk内のコードの実行結果がスクリプト内に表示されるなど新しい機能を備えています。しかし、どっちつかずな感じがして、まだ使いどころがつかめません。Rマークダウンとほとんど同じように操作できますので、新しいものが好きな方はぜひトライしてみてください。

RMarkdownのTips

Rマークダウンなどを利用するときのTips

作成日時の記録

Rmdファイルのタイトル直後に以下の見出しとChunkを入れておくと、Knit HTMLするたびにタイムスタンプが押されます。

## このファイルの作成日時

```{r timelog, echo = FALSE}

Sys.time()

```

ちなみに、このChunkの名前はtimelogとなります。また、「echo = FALSE」としているので、Sys.time()は表示されません。

表の出力

回帰の解析結果などを整形した形で出力するには、以下の見出しとChunkを入れておくと便利です。Rでの標準の解析結果の出力(回帰式なども含む)と、整形済みの解析結果が並んで表示されます。xtable関数はxtableパッケージにあるので、インストールと呼び出しを忘れないようにする必要があります。

## パッケージの呼び出し

```{r packages}

library(xtable)

```

## 整形済み解析結果

```{r for output, results = 'asis', echo = FALSE}

print(xtable(summary(res.lm)), type = "html")

```

Chunkの名前はpackagesとfor outputです。for outputのようにスペースを間に入れても問題ありません。この例では、回帰分析の結果をres.lmというオブジェクトに付値しているという設定です。