第36回

勉強会@東京(#TokyoR)

~knitr+pandocではじめる~
『R MarkdownでReproducible Research』

@teramonagi
もくじ
• 自己紹介&モチベーション
• 準備
• R MarkdownでReproducible Research
–基礎編
–応用編
• まとめ
• 参考(書籍|スライド|サイト)
2
自己紹介
• ID:@teramonagi
• 興味:/R/C++/F#/
微分幾何/モンテ
カルロ法/物理学
/金YOU/

• 直近:ドキュメン
テーション辛い
3
このお話のモチベーション
• 計算/分析結果をまとめたWord/TeX
を書くのがめんどい
–TeXのタグがしんどい。Wordの“見
出し”が俺の言うこと聞かない…
• そもそも結果に再現性がない
–あのcsvとあのDBのデータを持っ
て来て云...
これから1,000枚の図
を手で報告書に貼りつ
けなきゃならんぜ!!!
終電コース!!!

5
そういうの、もうしんどい

この状況、
どうにかなら
ないの?
6
でも、大丈夫

そう、

Markdownならね

7
Markdownを使えば…
• Rのコードと、資料本文を管理・作成
(文芸的プログラミングの実践)
• コードと本文から成るドキュメントを
再実行(コンパイル)すれば結果の
再現性が担保される
(Reproducible Research)
※...
準備
9
本スライドの話に必要な道具
• Rstudio(knitrパッケージ)
• pandoc
• TeX環境一式
• (Windows)
• (Microsoft Office環境)
10
RStudio
• Rの統合開発環境(IDE)

http://www.rstudio.com/ide/download/desktop

11
knitrパッケージ
• Rのコンソールで、以下のコマンドを
実行

> install.packages("knitr")

12
Pandoc
• ドキュメント・コンバータ

http://johnmacfarlane.net/pandoc/

13

※PDF/MS Wordを作るのに使用。LINK先にあるDLページからmsiファイルでインストール
TeX
• TeXインストーラ(PDF作成用)

http://www.math.sci.hokudai.ac.jp/~abenori/soft/abtexinst.html
※TeXをPDFにする際に使用。LINK下部の【ダウンロード】から最...
R MarkdownでReproducible Research

基礎編
15
R Markdownを書くために
• Rstudio上でknitrパッケージを使用
• knitr≒文芸的プログラミングエンジン
• R(コード)と「LaTeX, HTML, Markdown,
reStructuredText」等の本文を組み...
大まかな流れ
(
.html
何
.Rmd
ら
(R Markdown)
.docx
か
の
処
knitr
.pdf
.Rhtml
理
(R HTML)
パッケージ
挟
.md
む
.Rnw
こ
.tex
(TeX+R)
と
屡
等
※reS...
.Rnwファイルの処理法

2つの処理法
がある

※Rstudioの設定画面(【Tools】→【Options】)

18
knitr/Sweaveの違い

Rのパッケージ
knitr
Sweave
処理対象
.Rhtml

.Rmd

.Rnw

※knitrとSweaveでは.Rnwを処理する際に使えるchunkのオプションがちょいと違う

19
.Rnw/.Rmdの違い
• TeXベース(.Rnw)かMarkdownベー
ス(.Rmd)かが違う
• できる事は.Rnwの方が多い(はず)

.Rnw
.Rmd
※.RnwのnwはNowebの意味でそういうLiterate Programm...
本題へ
21
まずは新規ファイルの作成

クリック

※Rstudioを立ち上げて【File】

22
デフォルトでなんか入ってる
1:ファイルを保存(UTF-8推奨)

2:を押す
※ファイルに変更がないと保存できないかも

23
結果(HTML)がプレビューされる

24
以下、こ
の.Rmdファ
イルに、コー
ドと文章を書
いきます
25
この後(少なくとも俺は)こうしてる
• 基本的に
1. (適当に)文章書いて
2. 間にRのコードを挟む
な感じで書いていく
• 時々、[Knit HTML]押してチェック
←行ったり来たり→

.Rmd
(R Markdown)

knitr...
まずは基本的な書き方
• 本文の間にチャンクと呼ばれる
```{r label, option1, …., optionN}
----ここにRのコード----```
を書き、Rのコードを埋め込んでいく
(label・optionはIDと処理のオ...
まずは基本的な書き方
• 以下の内容を.Rmdファイルに追記
やぁ、みんなこんにちは!
ぼくのRのversionは
```{r my_r_version, warning=TRUE}
R.version.string
```
Rのコード
ダヨ!...
まずは基本的な書き方
• [Knit HTML]ボタン押すと以下のよう
な、出力が得られる

※宗教上の理由で古いRを使っております

29
アドバイス
• Chunkのlabelは同/別のファイルか
ら参照する際に使用されるんで、な
くてもOKだが、必要ならちゃんとつ
けとけ。chunkの共有・参照に便利
• Chunkのオプションはたくさんあるか
ら、使いそうなもんだけ覚えておけ...
インラインChunk
• 以下の内容を.Rmdファイルに追記
`r XXX`でインライン展
開されるchunkになる

carsデータに関する回帰分析だーっ!
```{r lm_result}
x <- lm(dist~speed, data=...
インラインChunk
• 文章中に結果が埋め込まれる
• 結果を適当な変数に入れておけば、
文章だけ先に用意することも可能

32
数式の追加
• 以下の内容を.Rmdファイルに追記
数式も表示できるヨ!!
$でインラインな数式
$f(x) = ax^2 + bx + c$、
$$で1行まるごと数式
$$f(x) = ax^2 + bx + c$$

TeX記法
を用いる
...
数式の追加
• 実行結果(HTML)
• mathjaxを用いて描画されている

34
表の追加
• resultsオプションに、”そのまま出力”を
意味する’asis’を指定
• knitr内のkable関数を使用(xtableも可)
• format=“markdown”でpandoc用
markdownテーブルへ出力可
``...
表の追加
• 表の”見てくれ”を変えたい場合は、
HTML表示の際に使われるcssファイ
ルを変える必要あり(※)

※参照:http://www.slideshare.net/wdkz/rstudio-13866958

36
図の追加
• 単純にPLOT関数を書けばOK
• fig.(width|height)には出力(Not 張付)
画像サイズをインチ単位で指定
• fig.capオプションに文字列を指定する
と図のキャプションも入る(Word等時)
```{r ...
図の追加

38
図の追加
• ggplot2なんかもOK
```{r plot_iris, fig.width=5, fig.height=4}
library(ggplot2)
qplot(Sepal.Length, Sepal.Width, data
=i...
図の追加

40
グローバルにオプション指定
• 毎回chunkにオプション書くのめんどい
• opts_chunkで全体に対して一括でオプ
ションを指定できる
```{r global_option, eval=FALSE}
#opts_chunk$setで指...
その他のオプションについて

R markdown(knitr)パッケージのchunk optionまとめ
http://d.hatena.ne.jp/teramonagi/20130615/1371303616

42
基礎編のまとめ
• とりあえずHTMLで
–Rの基本的な実行結果
–図・表・数式
が出力できるようになった!
• レポートをHTMLで作成していいなら
これで大体OK
• オプションは必要に応じてググれ
43
本文を書く際に使える

Markdownのクイックリファレンス
Markdownの
クイックリファレン
スが開くクリック

※見出し、フォント等の設定法が書いてある。最新版のRStudioだとちょい見てくれ違う

44
R MarkdownでReproducible Research

応用編
45
応用編

• もうちょっと”凝った”ものを作
るためのテクニック的なもの
• 俺が悩んで酷い目にあったも
のへの対処法
…を紹介
46
Chunkオプションの条件化
• ChunkオプションにはRの変数や関
数の結果を代入することが可能
• 例:xが3より大きい場合のみchunk
を評価
```{r conditionalchunk_eval, eval=(x>3)}
prin...
スクリプトの共有
• read_chunk関数により、Rで書いた他の
ファイルを取りこむことが可能
• 以下の内容のファイルが”share/shared.R”
として保存してあると仮定
## @knitr plus10r

plus10 <- ...
スクリプトの共有
.Rmdの例

その出力結果

```{r read_shared_r}
read_chunk("share/shared_r.R")
```
```{r plus10r}
```

shared_r.R内の関数が
## @k...
.Rmdファイルの分割
• 以下のような内容の.Rmdを作成
(share/shared_rmd.Rmdとした)
```{r child_rmd}
print("これは別ファイルに記述されたR Markdownです")
```

• 別の.Rm...
.Rmdファイルの分割
• .Rmdが展開(本文)され、chunkも実
行される
• 複数人で書く、あるいは章ごとに分
けるなどの際に便利

51
他の言語、突っ込む
• engineオプションを指定することで、
他の言語(python, ruby, sed, awk,
haskell, SAS, perl)をchunkとして突っ
込める
• 更に、Rcppを指定するとRcppのコー
ドを...
他の言語、突っ込む(Rcpp)
• フィボナッチ数列計算関数作成
```{r engine_rcpp, engine='Rcpp'}

#include<Rcpp.h>

// [[Rcpp::export]]
int fibCpp(const...
他の言語、突っ込む(Rcpp)
• 作成した関数を.Rmd内部で使用
```{r r use_rcpp}
#Rcppで作成した関数を使用
fibCpp(10)
```

54
他の言語、突っ込む(python)
• フィボナッチ数列計算関数作成&実行
```{r engine='python'}
def fibPy(n):
if n == 0 or n == 1 :
return n
else:
return fib...
他の言語、突っ込む(python)
• HTMLとして出力すると、ちゃんとソー
ス+実行された結果が返ってくる

56
Chunkのエイリアス
• Chunkオプションには、略記のため
の”別名”を付けることも可能
```{r}
set_alias(w = "fig.width", h = "fig.height")
```
```{r w=7, h=6}
pl...
コードをAppendixに載せる
Aという手法を用いると、以下のような結果が算出される。
```{r AppA, echo=FALSE}
1+1
```
一方、手法Bを用いると、以下のような結果となった。
```{r AppB, echo=FA...
コードをAppendixに載せる

59
テンプレートからの作成
• Rのソースコードを雛型として、一気に
定型レポート作成する関数もあり
–spin: .R ---> .md
–stitch: .R ---> .md/.html/.pdf(*1)
• spinは変換のみ
• stit...
テンプレートからの作成
• spin関数、RStudioから即使えます
こいつをポチる

61
テンプレートからの作成
• spin関数による変換結果

62
さて、
63
日本を支える
ビジネスマンの
皆さん
64
鬼門です
65
鬼門
すぐに Word
で報告書を
作成して
66
手で図・表の結果をWord貼り付ける…
枚数によっては

※VBA使ってもしんどい

67
Word/PDFで出力したい
• Pandocを使って、knitrの出力
(Markdown)をWord/PDFへ変換する
方向で
• knitrから直接変換できるものの、日
本語が入ると正直キツい
• これは試行錯誤の末の一案なので、
だれか...
ドキュメント変換のルート
markdown

.Rmd

基礎編のルート

.md

pandoc

pandoc

knitr

.tex

.html
.docx

TeX
(LuaLaTeX)

.pdf
69
ドキュメント変換に向けて
• HTML以外にするためには、ある程
度knitrが中でどんな動きをしている
のかを知っておくのが得策
• というわけで、[Knit HTML]ボタンを
押した場合の挙動をちょいと紹介

70
[Knit HTML]ポチった時の動作
.Rmd
(R Markdown)

knit関数
(knitrパッケージ)

.md
(Markdown)

markdownToHTML関数
(markwodnパッケージ)

.html
(HTML)...
[Knit HTML]ポチった時の動作
• 模倣するには、以下のように書く
library(knitr)
library(markdown)
output <- knit(“TokyoR36_Basic.rmd”,encoding=“UTF-8...
ドキュメント変換の指針
• なんで、knit関数を使って、
Markdown(.md)を作成した後、これ
をmarkdownパッケージ経由でHTML
にはせずに、Word/PDFに“変換”す
る方法を取る
• その”変換”にはpandocを使用...
ドキュメント変換の際の注意
• HTMLでチェックしつつ、Markdownに
持って行こうと思う場合、表の形式を
HTML⇔Markdownで切り替える必要
がある
• とりあえず、以下のようなコード
を、.Rmdの頭に書くようにしておいた
`...
Wordへの変換
• こんな感じでいけます
• pandocはRのpandoc関数で召喚
• tableがmarkdownになるように設定
```{r convert_to_docx, eval=FALSE}
library(knitr)
en...
Wordへの変換結果

76
からの、

罠

• 僕のWord数式が文字化ける

※Word 2007だけかも?手元に環境がないのでよくわからない

77
数式の文字化け修正
• Wordファイルの拡張子を.docx→zip
へと変更
• zipを解凍し、word/document.xmlを
適当なテキストエディタで開く

78
数式の文字化け修正
ファイル内の

<m:t>
を

<w:rFonts w:hAnsi="Cambria Math"
w:ascii="Cambria Math"/><m:t>
に置換&保存する
79
数式の文字化け修正
• 解凍したファイル4つを選択し、また再圧縮
• 拡張子を.docxに戻す

80
数式の文字化け修正
• 拡張子をdocxに戻すとちゃんと数式
が表示される!!!
• オイラやったよ!!!

81
やったね!

図・表の1,000枚程度、

ドンと来い
82
PDFで出力したい
• [.md]→[.tex]→[.pdf]とTeX経由でPDFへ
• 以下のような”おまじない”でPDFになります
• コマンドプロンプトで「pandoc –D latex」と
打って出る結果が、デフォルトのTeXのテン
プ...
PDFで出力したい

ごちゃごちゃ面
倒だし、Wordを
PDFで名前付け
て保存でいいや
※あくまで私見です

84
この資料で全く解説してない内容
• hookというknitr内で行われるR
Markdown処理の拡張方法がある
–chunkオプションを拡張する事がで
きる
–Chunkの処理(前後)に好きな処理
を挟むことが出来る
• “knit_hook...
後は頑張って作者のページ嫁

http://yihui.name/knitr/

86
変換周りはPandocのマニュアル嫁

http://johnmacfarlane.net/pandoc/README.html
87
Pandocの日本語ユーザーズマニュアル有

@sky_y氏多謝!!!( http://sky-y.github.io/site-pandoc-jp/users-guide/)

88
Enjoy!!!
89
参考書籍
Dynamic Documents with R and knitr
どちらかとい
うとLaTeXとい
うか.Rnwの話
題が多い

90
参考スライド
そろそろRStudioの話でもしてみようと思う

http://www.slideshare.net/wdkz/rstudio-13866958 91
参考スライド
RStudio事始め

http://www.slideshare.net/TakashiYamane1/rstudio92
参考スライド
RでReproducible Research

http://www.slideshare.net/sfchaos/rreproducible-research-13569000

93
参考サイト

http://kbroman.github.io/knitr_knutshell/

94
参考サイト

https://github.com/yihui/knitr-examples 95
参考サイト

http://d.hatena.ne.jp/a_bicky/20140221/1392941055

96
Upcoming SlideShare
Loading in...5
×

~knitr+pandocではじめる~『R MarkdownでReproducible Research』

16,175

Published on

第36回R勉強会@東京(#TokyoR)の資料

Published in: Education

~knitr+pandocではじめる~『R MarkdownでReproducible Research』

  1. 1. 第36回 勉強会@東京(#TokyoR) ~knitr+pandocではじめる~ 『R MarkdownでReproducible Research』 @teramonagi
  2. 2. もくじ • 自己紹介&モチベーション • 準備 • R MarkdownでReproducible Research –基礎編 –応用編 • まとめ • 参考(書籍|スライド|サイト) 2
  3. 3. 自己紹介 • ID:@teramonagi • 興味:/R/C++/F#/ 微分幾何/モンテ カルロ法/物理学 /金YOU/ • 直近:ドキュメン テーション辛い 3
  4. 4. このお話のモチベーション • 計算/分析結果をまとめたWord/TeX を書くのがめんどい –TeXのタグがしんどい。Wordの“見 出し”が俺の言うこと聞かない… • そもそも結果に再現性がない –あのcsvとあのDBのデータを持っ て来て云々…あれ?結果が違う? 4
  5. 5. これから1,000枚の図 を手で報告書に貼りつ けなきゃならんぜ!!! 終電コース!!! 5
  6. 6. そういうの、もうしんどい この状況、 どうにかなら ないの? 6
  7. 7. でも、大丈夫 そう、 Markdownならね 7
  8. 8. Markdownを使えば… • Rのコードと、資料本文を管理・作成 (文芸的プログラミングの実践) • コードと本文から成るドキュメントを 再実行(コンパイル)すれば結果の 再現性が担保される (Reproducible Research) ※“文芸的プログラミング”と“Reproducible Research”の正確な定義がよくわからん… 8
  9. 9. 準備 9
  10. 10. 本スライドの話に必要な道具 • Rstudio(knitrパッケージ) • pandoc • TeX環境一式 • (Windows) • (Microsoft Office環境) 10
  11. 11. RStudio • Rの統合開発環境(IDE) http://www.rstudio.com/ide/download/desktop 11
  12. 12. knitrパッケージ • Rのコンソールで、以下のコマンドを 実行 > install.packages("knitr") 12
  13. 13. Pandoc • ドキュメント・コンバータ http://johnmacfarlane.net/pandoc/ 13 ※PDF/MS Wordを作るのに使用。LINK先にあるDLページからmsiファイルでインストール
  14. 14. TeX • TeXインストーラ(PDF作成用) http://www.math.sci.hokudai.ac.jp/~abenori/soft/abtexinst.html ※TeXをPDFにする際に使用。LINK下部の【ダウンロード】から最新版をインストール 14
  15. 15. R MarkdownでReproducible Research 基礎編 15
  16. 16. R Markdownを書くために • Rstudio上でknitrパッケージを使用 • knitr≒文芸的プログラミングエンジン • R(コード)と「LaTeX, HTML, Markdown, reStructuredText」等の本文を組み合 わせ、動的にレポートを生成可能 • ”チャンク(chunk)”というコード(塊?片?) とレポート”本文”をあわせて書く ※実はR以外にもC++・python・awkなんかもいける 16
  17. 17. 大まかな流れ ( .html 何 .Rmd ら (R Markdown) .docx か の 処 knitr .pdf .Rhtml 理 (R HTML) パッケージ 挟 .md む .Rnw こ .tex (TeX+R) と 屡 等 ※reStructuredTextなんかもイケる ※正確に言うと、knitrパッケージは【R Markdown(.Rmd)】→【Markdown(.md)】を担当 17 ) R+本文(HTML, MarkDown等)
  18. 18. .Rnwファイルの処理法 2つの処理法 がある ※Rstudioの設定画面(【Tools】→【Options】) 18
  19. 19. knitr/Sweaveの違い Rのパッケージ knitr Sweave 処理対象 .Rhtml .Rmd .Rnw ※knitrとSweaveでは.Rnwを処理する際に使えるchunkのオプションがちょいと違う 19
  20. 20. .Rnw/.Rmdの違い • TeXベース(.Rnw)かMarkdownベー ス(.Rmd)かが違う • できる事は.Rnwの方が多い(はず) .Rnw .Rmd ※.RnwのnwはNowebの意味でそういうLiterate Programmingツールに由来するらしい 20
  21. 21. 本題へ 21
  22. 22. まずは新規ファイルの作成 クリック ※Rstudioを立ち上げて【File】 22
  23. 23. デフォルトでなんか入ってる 1:ファイルを保存(UTF-8推奨) 2:を押す ※ファイルに変更がないと保存できないかも 23
  24. 24. 結果(HTML)がプレビューされる 24
  25. 25. 以下、こ の.Rmdファ イルに、コー ドと文章を書 いきます 25
  26. 26. この後(少なくとも俺は)こうしてる • 基本的に 1. (適当に)文章書いて 2. 間にRのコードを挟む な感じで書いていく • 時々、[Knit HTML]押してチェック ←行ったり来たり→ .Rmd (R Markdown) knitr ※もっといいやり方あったら教えてください .html 26
  27. 27. まずは基本的な書き方 • 本文の間にチャンクと呼ばれる ```{r label, option1, …., optionN} ----ここにRのコード----``` を書き、Rのコードを埋め込んでいく (label・optionはIDと処理のオプション) • .Rhtmlでも.Rnwでも基本こんな感じ (Chunkの開始・終了タグがちょいと違うだけ) 27
  28. 28. まずは基本的な書き方 • 以下の内容を.Rmdファイルに追記 やぁ、みんなこんにちは! ぼくのRのversionは ```{r my_r_version, warning=TRUE} R.version.string ``` Rのコード ダヨ!!! Chunk Chunkのlabel. ID的なもん Chunkのオプション的なもん 28
  29. 29. まずは基本的な書き方 • [Knit HTML]ボタン押すと以下のよう な、出力が得られる ※宗教上の理由で古いRを使っております 29
  30. 30. アドバイス • Chunkのlabelは同/別のファイルか ら参照する際に使用されるんで、な くてもOKだが、必要ならちゃんとつ けとけ。chunkの共有・参照に便利 • Chunkのオプションはたくさんあるか ら、使いそうなもんだけ覚えておけ (後述) 30
  31. 31. インラインChunk • 以下の内容を.Rmdファイルに追記 `r XXX`でインライン展 開されるchunkになる carsデータに関する回帰分析だーっ! ```{r lm_result} x <- lm(dist~speed, data=cars) ``` この結果、回帰係数の切片は `r coef(x)["speed"]`となった。 31
  32. 32. インラインChunk • 文章中に結果が埋め込まれる • 結果を適当な変数に入れておけば、 文章だけ先に用意することも可能 32
  33. 33. 数式の追加 • 以下の内容を.Rmdファイルに追記 数式も表示できるヨ!! $でインラインな数式 $f(x) = ax^2 + bx + c$、 $$で1行まるごと数式 $$f(x) = ax^2 + bx + c$$ TeX記法 を用いる 33
  34. 34. 数式の追加 • 実行結果(HTML) • mathjaxを用いて描画されている 34
  35. 35. 表の追加 • resultsオプションに、”そのまま出力”を 意味する’asis’を指定 • knitr内のkable関数を使用(xtableも可) • format=“markdown”でpandoc用 markdownテーブルへ出力可 ```{r table1, results='asis'} x <- lm(dist ~ speed, data=cars) kable(summary(x)$coef, format="html",digits=2) ``` ※その他、panderパッケージなるものを使う手もある 35
  36. 36. 表の追加 • 表の”見てくれ”を変えたい場合は、 HTML表示の際に使われるcssファイ ルを変える必要あり(※) ※参照:http://www.slideshare.net/wdkz/rstudio-13866958 36
  37. 37. 図の追加 • 単純にPLOT関数を書けばOK • fig.(width|height)には出力(Not 張付) 画像サイズをインチ単位で指定 • fig.capオプションに文字列を指定する と図のキャプションも入る(Word等時) ```{r plot_cars, fig.width=5, fig.height=4} plot(cars) ``` 37
  38. 38. 図の追加 38
  39. 39. 図の追加 • ggplot2なんかもOK ```{r plot_iris, fig.width=5, fig.height=4} library(ggplot2) qplot(Sepal.Length, Sepal.Width, data =iris, colour=Species) ``` 39
  40. 40. 図の追加 40
  41. 41. グローバルにオプション指定 • 毎回chunkにオプション書くのめんどい • opts_chunkで全体に対して一括でオプ ションを指定できる ```{r global_option, eval=FALSE} #opts_chunk$setで指定したものは、 #全体に設定されるので以降指定しなくてOK opts_chunk$set(fig.width=6, fig.height=6) ``` 41
  42. 42. その他のオプションについて R markdown(knitr)パッケージのchunk optionまとめ http://d.hatena.ne.jp/teramonagi/20130615/1371303616 42
  43. 43. 基礎編のまとめ • とりあえずHTMLで –Rの基本的な実行結果 –図・表・数式 が出力できるようになった! • レポートをHTMLで作成していいなら これで大体OK • オプションは必要に応じてググれ 43
  44. 44. 本文を書く際に使える Markdownのクイックリファレンス Markdownの クイックリファレン スが開くクリック ※見出し、フォント等の設定法が書いてある。最新版のRStudioだとちょい見てくれ違う 44
  45. 45. R MarkdownでReproducible Research 応用編 45
  46. 46. 応用編 • もうちょっと”凝った”ものを作 るためのテクニック的なもの • 俺が悩んで酷い目にあったも のへの対処法 …を紹介 46
  47. 47. Chunkオプションの条件化 • ChunkオプションにはRの変数や関 数の結果を代入することが可能 • 例:xが3より大きい場合のみchunk を評価 ```{r conditionalchunk_eval, eval=(x>3)} print("x は3より大きい") ``` ※ 図の番号をつけるのとかにも使える ※参照:https://github.com/yihui/knitr-examples/blob/master/070-caption-num.Rmd 47
  48. 48. スクリプトの共有 • read_chunk関数により、Rで書いた他の ファイルを取りこむことが可能 • 以下の内容のファイルが”share/shared.R” として保存してあると仮定 ## @knitr plus10r plus10 <- function(x){ x+10 } plus10(3) ## @knitr subset_iris subset(iris, Sepal.Length>7.6) 48
  49. 49. スクリプトの共有 .Rmdの例 その出力結果 ```{r read_shared_r} read_chunk("share/shared_r.R") ``` ```{r plus10r} ``` shared_r.R内の関数が ## @knitr plus10r という書式で指定されたラベルで実行できる! 49
  50. 50. .Rmdファイルの分割 • 以下のような内容の.Rmdを作成 (share/shared_rmd.Rmdとした) ```{r child_rmd} print("これは別ファイルに記述されたR Markdownです") ``` • 別の.Rmdでchildオプションで指定 ```{r child1, child="share/shared_rmd.Rmd"} ``` 50
  51. 51. .Rmdファイルの分割 • .Rmdが展開(本文)され、chunkも実 行される • 複数人で書く、あるいは章ごとに分 けるなどの際に便利 51
  52. 52. 他の言語、突っ込む • engineオプションを指定することで、 他の言語(python, ruby, sed, awk, haskell, SAS, perl)をchunkとして突っ 込める • 更に、Rcppを指定するとRcppのコー ドを書く事も可能 52
  53. 53. 他の言語、突っ込む(Rcpp) • フィボナッチ数列計算関数作成 ```{r engine_rcpp, engine='Rcpp'} #include<Rcpp.h> // [[Rcpp::export]] int fibCpp(const int x){ if(x==0 || x==1){return(x);} return(fibCpp(x-1) + fibCpp(x-2)); } ``` 53
  54. 54. 他の言語、突っ込む(Rcpp) • 作成した関数を.Rmd内部で使用 ```{r r use_rcpp} #Rcppで作成した関数を使用 fibCpp(10) ``` 54
  55. 55. 他の言語、突っ込む(python) • フィボナッチ数列計算関数作成&実行 ```{r engine='python'} def fibPy(n): if n == 0 or n == 1 : return n else: return fibPy(n-1) + fibPy(n-2) print fibPy(10) ``` 55
  56. 56. 他の言語、突っ込む(python) • HTMLとして出力すると、ちゃんとソー ス+実行された結果が返ってくる 56
  57. 57. Chunkのエイリアス • Chunkオプションには、略記のため の”別名”を付けることも可能 ```{r} set_alias(w = "fig.width", h = "fig.height") ``` ```{r w=7, h=6} plot(cars) ``` ※正確にはchunkオプション以外にPackageオプションがあり、aliasはその1つ 57
  58. 58. コードをAppendixに載せる Aという手法を用いると、以下のような結果が算出される。 ```{r AppA, echo=FALSE} 1+1 ``` 一方、手法Bを用いると、以下のような結果となった。 ```{r AppB, echo=FALSE} 2+3 ``` ~Appendix~ 手法Aのコード ```{r AppA, eval=FALSE} ``` 手法Bのコード ```{r ref.label=c('AppB'), eval=FALSE} ``` ※ちなみにall_labels関数を用いると全chunkのlabelが引ける 58
  59. 59. コードをAppendixに載せる 59
  60. 60. テンプレートからの作成 • Rのソースコードを雛型として、一気に 定型レポート作成する関数もあり –spin: .R ---> .md –stitch: .R ---> .md/.html/.pdf(*1) • spinは変換のみ • stitchは簡単なレポートのテンプレート まで作ってくれる(*2) ※1: 日本語環境だとpdf生成は、相当頑張って設定しないとキツいとおもう… ※2: デフォルトのテンプレートだとsessioninfo, ファイルの生成時間を自動で付けてくれたり する。テンプレートは指定可能。 60
  61. 61. テンプレートからの作成 • spin関数、RStudioから即使えます こいつをポチる 61
  62. 62. テンプレートからの作成 • spin関数による変換結果 62
  63. 63. さて、 63
  64. 64. 日本を支える ビジネスマンの 皆さん 64
  65. 65. 鬼門です 65
  66. 66. 鬼門 すぐに Word で報告書を 作成して 66
  67. 67. 手で図・表の結果をWord貼り付ける… 枚数によっては ※VBA使ってもしんどい 67
  68. 68. Word/PDFで出力したい • Pandocを使って、knitrの出力 (Markdown)をWord/PDFへ変換する 方向で • knitrから直接変換できるものの、日 本語が入ると正直キツい • これは試行錯誤の末の一案なので、 だれかもっといいやり方あったら教 えて… 68
  69. 69. ドキュメント変換のルート markdown .Rmd 基礎編のルート .md pandoc pandoc knitr .tex .html .docx TeX (LuaLaTeX) .pdf 69
  70. 70. ドキュメント変換に向けて • HTML以外にするためには、ある程 度knitrが中でどんな動きをしている のかを知っておくのが得策 • というわけで、[Knit HTML]ボタンを 押した場合の挙動をちょいと紹介 70
  71. 71. [Knit HTML]ポチった時の動作 .Rmd (R Markdown) knit関数 (knitrパッケージ) .md (Markdown) markdownToHTML関数 (markwodnパッケージ) .html (HTML) ※実際はRstudio内部にあるMarkdownからHTMLにする内部関数が使われてるらしい 71
  72. 72. [Knit HTML]ポチった時の動作 • 模倣するには、以下のように書く library(knitr) library(markdown) output <- knit(“TokyoR36_Basic.rmd”,encoding=“UTF-8”) #「invalid multibyte string at」 #というエラーが出るので解消するためにロケール変えてる。 #Windows 7だけかも? #ロケール変えなくていいなら #knitr::knit2html関数もほぼ同じ挙動 Sys.setlocale(locale=“C”) markdownToHTML(output, output=“ TokyoR36_Basic.html") 72
  73. 73. ドキュメント変換の指針 • なんで、knit関数を使って、 Markdown(.md)を作成した後、これ をmarkdownパッケージ経由でHTML にはせずに、Word/PDFに“変換”す る方法を取る • その”変換”にはpandocを使用 73
  74. 74. ドキュメント変換の際の注意 • HTMLでチェックしつつ、Markdownに 持って行こうと思う場合、表の形式を HTML⇔Markdownで切り替える必要 がある • とりあえず、以下のようなコード を、.Rmdの頭に書くようにしておいた ```{r table_format} table.format <- ifelse(exists(“table.format”), table.format, “html”) ``` ※参考程度に後述するhookってのを使うのもあり 74
  75. 75. Wordへの変換 • こんな感じでいけます • pandocはRのpandoc関数で召喚 • tableがmarkdownになるように設定 ```{r convert_to_docx, eval=FALSE} library(knitr) env <- new.env() assign(“table.format”, “markdown”, env) output <- knit(“TokyoR36_Basic.Rmd”, envir=env, encoding=“UTF-8”) pandoc(output, format=‘docx’) ``` ※pandocのオプションとして--reference-docxをつけると.docxの書式等を指定したテンプレートが使える ※ @sky_y氏作の日本語訳有!多謝!(http://sky-y.github.io/site-pandoc-jp/users-guide/) 75
  76. 76. Wordへの変換結果 76
  77. 77. からの、 罠 • 僕のWord数式が文字化ける ※Word 2007だけかも?手元に環境がないのでよくわからない 77
  78. 78. 数式の文字化け修正 • Wordファイルの拡張子を.docx→zip へと変更 • zipを解凍し、word/document.xmlを 適当なテキストエディタで開く 78
  79. 79. 数式の文字化け修正 ファイル内の <m:t> を <w:rFonts w:hAnsi="Cambria Math" w:ascii="Cambria Math"/><m:t> に置換&保存する 79
  80. 80. 数式の文字化け修正 • 解凍したファイル4つを選択し、また再圧縮 • 拡張子を.docxに戻す 80
  81. 81. 数式の文字化け修正 • 拡張子をdocxに戻すとちゃんと数式 が表示される!!! • オイラやったよ!!! 81
  82. 82. やったね! 図・表の1,000枚程度、 ドンと来い 82
  83. 83. PDFで出力したい • [.md]→[.tex]→[.pdf]とTeX経由でPDFへ • 以下のような”おまじない”でPDFになります • コマンドプロンプトで「pandoc –D latex」と 打って出る結果が、デフォルトのTeXのテン プレートになるので、スタイル変更したい場 合は、適当に改変する必要有(*) library(knitr) env <- new.env() assign(“table.format”, “markdown”, env) output <- knit(“TokyoR36_Basic.Rmd”, envir=env, encoding=“UTF-8”) system(sprintf(“pandoc -s %s -V documentclass=ltjltxdoc -o hoge.tex”, output)) system(“lualatex -interaction=nonstopmode hoge.tex”) ※おとなしくユーザガイド見るのが一番いい(http://johnmacfarlane.net/pandoc/README.html ※ @sky_y氏作の日本語訳有!多謝!(http://sky-y.github.io/site-pandoc-jp/users-guide/) 83
  84. 84. PDFで出力したい ごちゃごちゃ面 倒だし、Wordを PDFで名前付け て保存でいいや ※あくまで私見です 84
  85. 85. この資料で全く解説してない内容 • hookというknitr内で行われるR Markdown処理の拡張方法がある –chunkオプションを拡張する事がで きる –Chunkの処理(前後)に好きな処理 を挟むことが出来る • “knit_hooks”で調べると良い ※正確にはchunk hooksとoutput hooksがある ※render_XXX(関数を調べるとよい 85
  86. 86. 後は頑張って作者のページ嫁 http://yihui.name/knitr/ 86
  87. 87. 変換周りはPandocのマニュアル嫁 http://johnmacfarlane.net/pandoc/README.html 87
  88. 88. Pandocの日本語ユーザーズマニュアル有 @sky_y氏多謝!!!( http://sky-y.github.io/site-pandoc-jp/users-guide/) 88
  89. 89. Enjoy!!! 89
  90. 90. 参考書籍 Dynamic Documents with R and knitr どちらかとい うとLaTeXとい うか.Rnwの話 題が多い 90
  91. 91. 参考スライド そろそろRStudioの話でもしてみようと思う http://www.slideshare.net/wdkz/rstudio-13866958 91
  92. 92. 参考スライド RStudio事始め http://www.slideshare.net/TakashiYamane1/rstudio92
  93. 93. 参考スライド RでReproducible Research http://www.slideshare.net/sfchaos/rreproducible-research-13569000 93
  94. 94. 参考サイト http://kbroman.github.io/knitr_knutshell/ 94
  95. 95. 参考サイト https://github.com/yihui/knitr-examples 95
  96. 96. 参考サイト http://d.hatena.ne.jp/a_bicky/20140221/1392941055 96
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×