宮﨑.indd

Size: px
Start display at page:

Download "宮﨑.indd"

Transcription

1 137 研 究 ノート 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 宮 﨑 憲 治 1 再 現 可 能 研 究 再 現 可 能 研 究 (reproducible research)が 注 目 されている 研 究 成 果 を まとめた 論 文 は 読 者 が 再 現 可 能 に 記 述 する 必 要 がある つまり 論 文 は, 分 析 結 果 や 図 表 がどのように 作 成 されたかを 再 現 可 能 なように 記 述 しなけれ ばならない また 最 近 の 学 術 雑 誌 ではデータ 分 析 の 際 の 現 データやそのプ ログラミングコードの 提 出 が 求 められている さらに 再 現 可 能 研 究 においての 論 文 は, 現 データからデータを 読 み 込 ん で 計 算 を 実 行 し, 図 表 を 作 成 するプロセスを 文 書 に 埋 め 込 むことができる 論 文 を 指 すようになっている そのように 論 文 を 作 成 しておけば,もとの データが 拡 張 されたり 計 算 手 法 が 修 正 されたときの 計 算 結 果 の 更 新 が 楽 に なる 逆 にそうしないとコピペミスなどが 発 生 するおそれがある つまり 再 現 可 能 に 学 術 論 文 をまとめることは, 読 者 のためだけでなく, 研 究 者 自 身 のためにもなり, 今 後, 身 につけておかなければならない 技 術 である なお,この 再 現 可 能 研 究 について, 文 芸 的 プログラミング(Literate programming)や 動 的 文 章 (Dynamic Documents)とも 呼 ばれている こ こでは, 研 究 プログラミング 文 章 のどれに 重 点 を 置 いているかのニュ アンス 以 外 には 区 別 せずに 用 いることにする

2 138 歴 史 的 に Knuth(1984)の 文 芸 的 プログラミングという 言 い 方 が 古 い 彼 は T E X を 考 案 している プログラムの 作 成 とその 文 書 化 を 同 時 におこ なうことによって, 整 合 的 な 文 章 とプログラムを 開 発 しようとするもので ある クヌース 自 身,WEB というシステムを 開 発 している WEB はもと もと T E X システムを 記 述 するために 開 発 された 現 在,これを 用 いてい る 人 間 はほとんどいない このコンセプトをより 単 純 化 したものが, Ramsey (1994)の noweb である この noweb を 統 計 ソフト S でもちいたのが Leisch (2002)の Sweave で ある これはあとでフリーソフト R に 拡 張 された これによって L A TEX に R のコマンドを 埋 め 込 むことができる そうすれば 計 算 結 果 のコピペに よるエラーなどが 回 避 可 能 となる Sweave は R に 標 準 搭 載 されていて, パッケージのマニュアルはこれで 作 成 されている 埋 め 込 んだファイルの 拡 張 子 は S の 場 合 Snw で,R の 場 合 Rnw である Sweaveをよりカラフルに 便 利 に 用 いたのが Xie の knitr である 当 初 knitr は Sweave 互 換 であったが, 現 在 は 互 換 性 はない tex ファイルを 出 力 するだけでなく,markdown で 作 成 されたに R コードを 埋 め 込 むことに よって,html にも 出 力 することができる さらに,python など, 他 の 言 語 にも 対 応 している knitr のホームページは である また 彼 自 身 が 書 いた 書 籍 Xie (2015)も 参 考 になる 本 稿 では knitrを 紹 介 しつつ 再 現 可 能 研 究 について 紹 介 していく knitr の 導 入 の 仕 方 は,Rのコンソール 上 で install.packages('knitr') と 入 力 すればよい RStudio では 自 動 的 にインストールされる RStudio については 前 回 の 研 究 ノート( 宮 﨑,2016)を 参 照 されたい 計 量 経 済 学 において Koenker and Zeileis (2009)が 再 現 可 能 性 の 研 究 に

3 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 139 ついて 議 論 している そこで 議 論 しているのは R と Sweave であり,knitr については 何 も 語 っていない また Gandrud (2015)は knitr を 中 心 に 再 現 可 能 論 文 の 方 法 論 について 考 察 している 彼 の 考 察 は 大 いに 参 考 になっ たが, 日 本 語 での 再 現 可 能 文 献 をどのようにすればよいかは 言 及 していな い 高 橋 (2014)は knitr でどのように 日 本 語 を 表 記 するかについて 言 及 し て い る が, 本 稿 の よ う に XeLaTeX に つ い て の 議 論 は な い な お XeLaTeXについては 宮 﨑 (2015a)を 参 照 されたい 本 論 の 構 成 は 以 下 の 通 りである まず Rnw ファイルについて 説 明 し, Rmd ファイルの 説 明 する Rmd ファイルの 説 明 の 前 に 簡 単 にマークダウ ン 記 法 についても 触 れている 次 に Rmd ファイルのためのエディタにつ いて 私 見 を 述 べ, 最 後 に 自 分 の 使 い 方 を 示 しながら 研 究 ノートを 終 える 2 Rnw 基 本 は, tex ファイルに 次 のようなコマンドを 埋 め 込 んで, 拡 張 子 を Rnwとする <<(ラベル, )オプション>>= なおラベルは 省 略 可 能 である.これをチャンクと 呼 んでいる.またインライ ンは \Sexpr{...} とすればよい たとえばデフォルトのもと <<>>= とすれば,コードとその 結 果 が 出 力 される ( 図 1) もしコードの 出 力 を 抑

4 140 rnorm(10) ##[1] ##[7] 図 1 knitrの 出 力 例 えたければ echo=false を 実 施 すればよい Rnwファイルの 最 初 に <<setup, include =FALSE, echo=false, warning =FALSE, message =FALSE>>= library(knitr) opts _chunk$set(echo =FALSE, warning=false, message とオプションとして 指 定 しておけば, 以 降 の 他 のチャンクでもこれが 指 定 される warning=false や message=false としないとライブラリの 読 み 込 みで 意 図 しないメッセージが 出 力 される RStudio 上 で 適 切 に 設 定 していればワンクリックで, PDF を 生 成 してく れる R のコンソール 上 では library(knitr) knit('myfile.rnw',encoding='utf-8') とする コマンドライン 上 では Rscript -e "library(knitr); knit('myfile.rnw', encoding='utf-8')" とする そうして tex ファイルを 生 成 する その 後, 通 常 の latex を 実 行 する 日 本 語 まじりの 文 章 でも 対 応 しているが,platex は RStudio 上 では 使 えない 逆 に Rnw ファイルから Rファイルを 作 るには,Rのコンソール 上 で

5 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 141 purl("myfile.rmw") を 実 行 すればよい 2.1 図 knitr で 図 を 作 成 するには, 別 途 ファイルを 作 成 して 保 存 して,それを 読 み 込 むやり 方 と 直 接 表 示 させるやり 方 がある R で 図 の 作 成 方 法 について は 宮 﨑 (2016)を 参 照 されたい 一 旦 保 存 するやり 方 は 前 の 研 究 ノートで 示 した 作 図 についてのチャンクを 付 け 加 えれば 良 い 直 接 表 示 するには 次 のようにする \documentclass{bxjsarticle} \usepackage{xltxtra} \usepackage{zxjatype} \usepackage[ipa]{zxjafont} \usepackage{graphicx} \begin{document} \begin{figure}[ht] \centering \caption{figtitle}\label{fig1} <<echo =FALSE, fig.width=7, fig.height=5, warning =FALSE, message =FALSE, dev ='pdf'>>= curve(dnorm(x), xlim =c( \end {figure} \end {document} dev の 指 定 がないと dev='png' と png 形 式 の 図 となる 図 の 指 定 単 位 はイ ンチである また 作 成 した 図 は 特 に 指 定 がない 限 り 同 じフォルダにサブフ ォルダ figure が 作 られそこに 保 存 される

6 142 日 本 語 のフォントを 用 いる 場 合,デバイスを cairo_pdf に 指 定 してフォ ントを 設 定 する たとえば <<echo=false, fig.width=7, fig.height=5, warning=false, message=false, dev='cairo_pdf'>>= par(family="ipagothic") curve(dnorm(x), xlim=c(-3,3), main=" 正 規 分 布 とする ここでは par(family="ipagothic") としている なお 日 本 語 ま じりだと, 作 成 に 時 間 がかかる また, 警 告 がでるのでオプションの warning を 必 ず FALSE にしなければならない ggplot2 を 用 いるなら,デバイスに cairo_pdf を 指 定 するのは 同 じで あるが,フォントの 指 定 の 仕 方 が 異 なる たとえば \begin{figure}[ht] \centering\caption{figtitle}\label{fig1} <<echo=false, fig.width=7, fig.height=5, warning=false, message=false, dev='cairo_pdf'>>= library(ggplot2) theme_set(theme_gray(base_family="ipagothic")) qplot(cars$speed, cars$dist, main=" 散 布 図 \end{figure} とする ここでは theme_set(theme_gray(base_family="ipagothic")) と 変 更 していることに 注 意 されたい tikzdevice を 用 いるなら, 以 下 のようにする

7 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 143 \documentclass{bxjsarticle} \usepackage{xltxtra} \usepackage{zxjatype} \usepackage[ipa]{zxjafont} \usepackage{tikz} \begin{document} \begin{figure} <<echo=false, fig.width=7, fig.height=5, warning=false, message=false, dev='tikz'>>= library(tikzdevice) options(tikzdefaultengine='xetex') curve(dnorm(x), xlim=c(-3,3), main=" 正 規 分 布 : $N(\\mu,\\ \end{figure} \end{document} 本 文 のほうに \usepackage{tikz} を 忘 れずにつけておかなければならな い 2.2 表 図 と 同 じように 別 途 作 成 して 保 存 するか, 直 接 表 示 するかのやり 方 があ る R での 作 表 方 法 については 宮 﨑 (2016)を 参 照 されたい 図 と 違 って 直 接 表 示 した 場 合 ファイルが 作 成 されない このとき 次 のように results= 'asis' を 付 け 加 える \documentclass{bxjsarticle} \usepackage{xltxtra} \usepackage{zxjatype} \usepackage[ipa]{zxjafont}

8 144 \begin{document} <<echo=false, results='asis'>>= data(cars) fm<-lm(dist~speed, data=cars) library(xtable) print(xtable(fm),floating=false, comment=false) \end{document} 下 から 二 行 目 で comment=false としているのは,コメントを 表 示 しないた めである Rnw 形 式 ではこれを 付 け 加 えなくても 動 作 するが, 後 で 説 明 する Rmd 形 式 の 出 力 の 際 にはこのコメントが 必 要 である また floating= FALSE としているのはフロート 体 の 指 定 を 自 分 でするからである これが なければ table 環 境 の 指 定 になる さらにキャプションやラベルの 指 定 も できる 私 は 自 分 で 指 定 するようにしている フロート 体 で 出 力 するには 次 のようにする \documentclass{bxjsarticle} \usepackage{xltxtra} \usepackage{zxjatype} \usepackage[ipa]{zxjafont} \begin{document} \begin{table}[ht] \centering\caption{tabtitle}\label{tab1} <<echo=false, \end{table} \end{document}

9 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 145 フロート 体 の 指 定 を 自 分 ですれば threeparttable を 用 いて 注 釈 付 の 図 が 作 図 可 能 になる \begin{table}[htb] \centering\caption{tabtitle}\label{tab1} \begin{threeparttable} <<echo=false, \begin{tablenotes}\footnotesize \item[1] Note.. \item[2] Souce \end{tablenotes} \end{threeparttable} \end{table} xtable 以 外 の 作 表 について 述 べる texreg の 場 合, 次 のようにする texreg(list(fm1,fm2,fm3),table = FALSE) フロート 体 を 未 指 定 にしている また stargazezr の 場 合, 次 のようにする stargazer(fm0,fm1, header=false, float=false) フロート 体 の 未 指 定 だけでなく,Rmd 形 式 で 出 力 する 際 にコメント 出 力 しないように header=false を 付 け 加 えている 2.3 beamer beamer に 対 しても 適 応 可 能 である beamer については 前 回 の 研 究 ノー ト( 宮 﨑,2015a)を 参 照 されたい

10 146 \documentclass{beamer} \usepackage{xltxtra} \usepackage{zxjatype} \usepackage[ipa]{zxjafont} \usetheme{madrid} \usecolortheme{beaver} \usefonttheme{professionalfonts} \title{test framebreaks} \author{ 宮 﨑 憲 治 } \begin{document} \maketitle <<setup, include=false>>= \begin{frame}[t, shrink, fragile] \frametitle{ 分 析 結 果 } <<size="footnotesize",out.width=".7\\linewidth">>= data(cars) fm<-lm(dist~speed, cars) \end{frame} \begin{frame} \frametitle{ 作 図 } <<echo=false, fig.width=7, fig.height=5>>= data(cars) fm<-lm(dist~speed, data=cars) plot(dist~speed, data=cars) \end{frame} \end{document}

11 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 147 フレームオプションで 入 力 や 結 果 コマンドが 含 まれる 場 合 は, fragile を 付 け 加 えなければならない また, 結 果 が 長 いとファイルに 収 まらない ことが 多 々ある チャンクオプションで, size="footnotesize" とする とうまくいくことが 多 い フレームオプションで shrink を 付 け 加 えると, 自 動 的 に 大 きさを 調 節 してくれる 自 動 的 な 調 整 に 満 足 が 行 かない 場 合,shrink=20 のように 数 字 を 変 えるとうまくいく なお, 数 ページにわたる 結 果 を shrink で 表 示 するときは, 非 常 に 小 さくなる 数 ページにわたる 結 果 をださないように するか, 分 離 して 表 示 したほうがよい 分 離 して 表 示 するには,allowframebreaks というオプションをつける とよい ただ beamer での fragile 環 境 の 出 力 は kframe からはみ 出 た 部 分 はそのまま 無 視 してしまう これを 防 ぐには 最 初 のところに 以 下 を 入 力 する <<setup, include=false>>= library(knitr) # the kframe environment does not work with allowframebreaks, so remove it knit_hooks$set(document = function(x) { gsub('\\\\(begin end)\\{kframe\\}', '', x) なお default 以 外 のテーマの 場 合, \frametitle をなしにしないといけ ない 2.4 bibtex 参 考 文 献 も 扱 うことができる 参 考 文 献 については 宮 﨑 (2015b)を 参 照 されたい ただ RStudio 上 から upbibtex を 扱 うことができないため,

12 148 日 本 語 の 参 考 文 献 がある 場 合 は, 扱 いに 気 をつけなければならない すでに upbibtex で bbl ファイルが 生 成 されていて 変 更 していないのなら, RStudio 上 から 実 施 すればよい そうでないと RStudio の 外 からコンパイ ルして, bbl ファイルを 生 成 する 必 要 がある 3 md(マークダウン) knitr は Rmd という 形 式 でも 作 成 することが 可 能 である Rmd は R+md のことで R を 埋 め 込 んだ md 形 式 のことである マークダウン 記 法 とは, 軽 量 マークアップ 言 語 の 一 つである ジョン グルーバー(John Gruber)によって2004 年 に 開 発 され, 多 くの 開 発 者 の 手 を 経 ながら 発 展 し てきた 通 常 の html でマークアップを 入 力 したときにタグ 打 ちが 面 倒 で ある このマークダウン 記 法 をつかえば, 簡 単 なルールをまもれば 簡 単 に 簡 単 に 作 成 でき,html に 出 力 可 能 である GitHub などのサイトでは html に 変 換 せずにマークダウン 形 式 のままでファイルをアップロードすればサ イトのほうで 変 換 してくれる html 以 外 にも pandoc を 用 いて 様 々な 形 式 に 変 換 してくれる pandoc はマークダウンだけでなく 様 々なファイル 形 式 を 互 いに 変 換 してくれるツールである 公 式 サイトは 以 下 にある このマークダウン 記 法 を Rに 埋 め 込 んだ 形 式 を Rmd 形 式 という RStudio をつかえば,コマンド 部 分 を knitr で 出 力 し,pdf だけでなく, html や word 形 式 でもファイルを 作 成 することができる なお pandoc は RStudio をインストールすれば 自 動 的 に 導 入 される R の 埋 め 込 み 方 につ いては 次 節 で 解 説 し, 以 下 この 節 ではマークダウン 記 法 の 基 本 を 概 説 する 3.1 タイトル RStudio で html 形 式 で 新 規 作 成 した 場 合,

13 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr title: "Untitled" author: "Kenji Miyazaki" date: "2014 年 12 月 31 日 " output: html_document --- と 出 力 される タイトルと 著 者 名 と 日 付 と 出 力 形 式 が 指 定 されているが, あとで 変 更 可 能 である 3.2 文 章 構 造 セクションは 行 頭 に #を 入 れることによって 作 成 する その 数 によって 構 造 が 変 わる # This is H1 ## This is H2 ### This is H3 #### This is H4 ##### This is H5 ###### This is H6 最 初 の2つは 次 でも 代 替 可 能 である This is H1 ========== This is H 文 字 修 飾 イタリックは *...* もしくは _..._ で 囲 む

14 150 太 字 は **...** もしくは... で 囲 む 取 消 線 をつけるには, ~~...~~ で 囲 む 3.4 箇 条 書 き 番 号 なしリストは 行 頭 に *, +, -\ のいずれかを 置 く 番 号 付 きリストは 行 頭 に 数 字 に 続 けてピリオドを 置 く 階 層 リストを 作 成 するには, 行 頭 に4つの 空 白 または1つのタブを 置 く 3.5 引 用 先 頭 に > で 引 用 ブロックとなる 3.6 コード インラインコードはシングルバッククオート (`) で 囲 む コードブロックはバッククオートを3つ 並 べた 行 (```) で 挟 む 3.7 数 式 インライン 数 式 モードは $...$ もしくは \(...\) で 囲 む ディスプレイ 数 式 モードは $$...$$ もしくは \[...\] で 挟 む 式 番 号 は 自 動 的 につかないので \tag{...} を 用 いる 複 数 の 数 式 の 場 合,aligned 環 境 を 使 うとよい $$ \begin{aligned} B'&=-\partial\times E,\tag{*}\\ E'&=\partial\times B -4\pi j, \end{aligned} $$

15 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 作 表 表 は 次 のように 作 表 する First Header Second Header Third Header Content Cell Content Cell Content Cell Content Cell Content Cell Content Cell もし 配 列 を 調 整 したい 場 合, 次 のようにする. First Header Second Header Third Header : : : : Left Center Right Left Center Right 3.9 作 図 ウェブ 上 の 画 像 は![テキスト]( とする 相 対 パス 上 の 画 像 は![テキスト](figures/picture.png) とする 3.10 リンク 相 互 参 照 リンクは とする インラインリンクは 同 様 に < とする リンク 先 を 隠 すのなら [Smaller]( とす る タイトル 付 きにしたければ [Resize]( com "a Safari extension") とする なお, 相 互 参 照 は pdf 出 力 にかんしては latex のコマンドをそのまま 入 力 しておくと pdf 出 力 について 出 来 るようである html 出 力 や docx 出 力

16 152 は 基 本 的 にできない ( / figure-captions-references-using-knitr-and-markdown-to-html) 3.11 参 考 文 献 参 考 文 献 は pandoc を 導 入 することで latex と html 出 力 について 出 来 る ようである ただ bibtex エンジンを upbibtex に 指 定 できないため, 日 本 語 文 献 の 参 照 は 現 状 では 厳 しい 3.12 脚 注 脚 注 を 入 れるには, 本 文 中 に 脚 注 を 入 れたい 箇 所 に ^[ 脚 注 内 容 ] と する もしくは 脚 注 を 入 れない 箇 所 に [^id1] と 書 き 別 の 場 所 に, [^id1]: 脚 注 内 容 とする いずれの 方 法 でも, 自 動 的 に 番 号 が 振 られ, 脚 注 内 容 が 文 章 の 最 後 に 置 かれる 3.13 その 他 行 末 に2 個 以 上 の 半 角 スペースを 入 れると,そこで 改 行 される 行 頭 から 行 末 まで 3 個 以 上 のアスタリスク (*) もしくはハイフン (-) があり, 前 後 の 行 が 空 白 行 の 場 合, 水 平 線 に 変 換 される 4 Rmd この 節 ではマークダウン 記 法 にどのように R コードに 埋 め 込 んで, RStudio で 文 書 を 作 成 していくかみていく Rnw 形 式 は pdf しか 出 力 でき なかったが,html や word 形 式 でもファイルを 作 成 することができる よ り 詳 しくは 以 下 を 参 照 されたい

17 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr また にあるチートシートも 有 益 である 4.1 原 則 原 則 としては ```{ r オプション} コマンド ``` を 付 け 加 える インラインは `r...` とすればよい pdf 出 力 の 際 のオプ ションは Rnw のときと 同 じである RStudio で R Markdown 形 式 のファ イルを 新 規 作 成 すると 簡 単 なテンプレートが 出 てくる html 出 力 はブラウ ザがそのまま 出 力 することができる word 出 力 のためには Microsoft word がインストールされていないといけない pdf 出 力 は latex がインス トールされていないといけない latex として texlive 2013 以 上 が 必 要 であ る html 出 力 と word 出 力 はデフォルトのままで 日 本 語 まじりの 文 章 を 出 力 することができる pdf 出 力 の 場 合, 後 述 するように 日 本 語 出 力 のため には 少 し 工 夫 が 必 要 である さらにプレゼンテーションファイルも 簡 単 に 作 ることができる pdf 出 力 は beamer 形 式 の 出 力 が 可 能 である そのやり 方 は 後 述 する html 出 力 では2 種 類 のスタイルがある ひとつは isoslides 形 式 で 非 常 にグラフィ カルにあらわせる ただスライドに 収 まらない 場 合, 表 示 されなくなるの で, 区 切 り 方 に 注 意 する 必 要 がある もう 一 方 は slidify である これは 派 手 なグラフィクスはないが,スライドにおさまらない 場 合 は 単 に 下 にス

18 154 クロールするだけでよいので 使 い 勝 手 がよい 作 り 方 は 最 初 のテンプレートでえらべば 例 付 きで 新 規 ファイルを 開 いて くれるので,それをもとに 修 正 すればよい 基 本 は ## で 表 題 となり, 箇 条 書 きは 以 下 のようにする ## Slide with Bullets -Bullet 1 -Bullet 2 -Bullet 3 R の 実 例 つきのスライドを 作 成 したい 場 合,Rmd を 使 えば 手 早 く 資 料 が 作 成 できる 注 意 することは 私 の 大 学 のようにプロジェクターの 解 像 度 がそれほど 細 かくない 場 合, 大 きすぎて 不 格 好 になる こうしたときは, 単 に html ファイルをそのまま 作 り, 適 宜 拡 大 しておくと 良 いだろう また Shinyというアニメーションを 使 い, 動 きのある html ファイルを 作 ることができる ここでは 紹 介 しないが 以 下 で 参 照 していただきたい pdf 出 力 の 注 意 しかし,pdf 出 力 の 場 合,たとえインストールされていても 日 本 語 まじり の 文 章 をデフォルトのままでは 出 力 できない もし 2015 年 9 月 にバージョンアップした BXjscls パッケージの BXJS 文 書 クラスに 更 新 しているなら,ヘッダーはつぎのようにする --- title: "タイトル" author: " 宮 﨑 憲 治 "

19 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 155 output: pdf_document: latex_engine: xelatex documentclass: bxjsarticle classoption: xelatex,ja=standard geometry: no --- BXjscls が 内 部 的 に 使 うから geometry を 使 用 してはいけない なお,ここでは xelatex であるが, 最 新 の BXjscls を 使 っていれば,latex エンジンを pdflatex に 指 定 しても, lualatexに 指 定 しても 動 作 する 残 念 な がら platex はうまくいかない 2つのエンジンについての 表 記 の 違 いは 以 下 を 参 照 されたい もし 最 新 の BXJS クラスに 更 新 していないのなら, latex エンジンを xelatex にして, 次 のようにする --- title: "タイトル" author: " 宮 﨑 憲 治 " header-includes: -\usepackage{xltxtra} -\usepackage{zxjatype} -\usepackage[ipa]{zxjafont} output: pdf_document: latex_engine: xelatex

20 156 documentclass: bxjsarticle geometry: no --- 日 本 語 を 使 用 するためのヘッダーを 挿 入 している ここでも geometry を 使 用 してはいけない beamer はで 日 本 語 のまじり 文 章 を PDF 作 成 する 場 合,latex エンジン を xelatexにするならヘッダーをつぎのようにすれば 出 力 可 能 である --- title: "タイトル" author: " 宮 﨑 憲 治 " header-includes: -\usepackage{xltxtra} -\usepackage{zxjatype} -\usepackage[ipa]{zxjafont} output: beamer_presentation: pandoc_args: --latex-engine=xelatex --- 更 に,わたしは Rmd ファイルの 最 初 に 次 のセットアップを 加 えている ```{r setup, include=false} library(knitr) opts_chunk$set(size = 'footnotesize') options(width=60) knit_hooks$set(document = function(x) {

21 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 157 gsub('\\\\(begin end)\\{kframe\\}', '', x) }) ``` デフォルトのままだと 文 字 幅 がはみ 出 してしまうので,フォント 小 さめに している Rnw と 同 様 に 複 数 にスライドを 分 けて 出 力 されるための 設 定 を 加 えている こ の 設 定 を 加 え, さ ら に 分 割 表 示 さ れ る 場 合 に は 以 下 の よ う に {.allowframebreaks} を 付 け 加 えるよい たとえば ## test {.allowframebreaks} ```{r} example(step, run.donttest=true) ``` とすると,そのフレームの latex のソースコードは 以 下 のようになる \begin{frame}[fragile,allowframebreaks]{test} \begin{shaded} \begin{highlighting}[] \KeywordTok{example}\NormalTok{(step, }\DataTypeTok{run. donttest =} \OtherTok{TRUE}\NormalTok{)} \end{highlighting} \end{shaded} 図 の 注 意 図 は Rnw とほぼ 同 じように 出 力 することができる latex の 場 合 pdf 出

22 158 力 でよいだろう word や html だと png 形 式 での 出 力 のほうが 望 ましい チャンクにオプションつけなければ,dev='png' を 意 味 し,png 形 式 のフ ァイルが 作 成 される なお Rmd 形 式 において tikz で 日 本 語 が 含 まれているときには 以 下 の ように 変 更 しなければならない ```{r,dev='tikz', warning=false, message=false, echo=false} library(tikzdevice) options(tikzdefaultengine='xetex') options(tikzxelatexpackages = c(getoption('tikzxelatexpackages'), '\\usepackage[ipa]{zxjafont}')) curve(dnorm(x), xlim=c(-3,3), main=" 正 規 分 布 : $N(\\mu, \\sigma^{2})$") ``` Rnwファイルと 違 い,オプション tikzxelatexpackages をつけなければ ならない ただ lattice だと 日 本 語 がうまく 表 示 されない 表 は latex と html は 同 じように 出 力 することはできない word につい ては 次 小 節 で 説 明 する latex の 場 合,Rnw のときと 同 様 である もしフ ロー 体 を Rmd でおこなうには, 引 数 を 調 整 すればよい ただ 図 に 番 号 が 付 くが,それを 参 照 することを Rmd 形 式 では 簡 単 にできない また 不 要 なコメントが 出 力 されるのでコメントアウトしなければならない それら の 指 定 はすでに 説 明 した htmlの 場 合,xtable では 次 のようにオプション type='html' を 付 け 加 えればよい ```{r echo=false, results='asis'} library(xtable) print(xtable(summary),type="html") ```

23 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 159 stargazer では 次 のようにオプション type= 'html' を 付 け 加 えればよい ```{r echo=false, results='asis'} library(stargazer) stargazer(fm1,fm2, type="html") ``` texreg では 次 のようにコマンド htmlreg に 変 更 すればよい ```{r echo=false, results='asis'} library(texreg) htmlreg(list(fm1,fm2)) ``` 4.4 word の 注 意 word の 場 合 は 表 をうまく 扱 えない kable を 使 えばマークダウン 形 式 の 表 を 出 力 してくれるので,word でも pdf でも html でもあつかえる ```{r echo=false, results='asis'} library(knitr) library(aer) fm<-lm(dist~speed, data=cars) hc <-vcovhc(fm, type="hc1") ct <-coeftest(fm, vcov = hc) kable(as.matrix(ct[,]),format="markdown") ``` kable は knitr を 導 入 することで 実 行 できるようになる ただ kable はオ ブジェクトとして dataframe と matrix しか 扱 えない もうすこし 表 を 装 飾 したい 場 合 pander というライブラリを 用 いればよい (http: //rapporter.

24 160 github.io/pander/) なお pander も summary(fm) は 上 手 く 出 力 するが, coeftest(fm) はやはり 上 記 のような 修 正 が 必 要 である word の 場 合,stargazer や texreg などの 複 数 の 回 帰 分 析 結 果 をまとめ る 表 は 一 発 で 綺 麗 に 変 換 してくれない 対 応 策 として, 綺 麗 さを 犠 牲 にする ならコマンド screenreg でテキスト 表 示 するようにすればよい screenreg のとき,チャンクオプションの results が 必 要 なくなることに 注 意 されたい つまり stargazer なら ```{r echo=false} library(stargazer) stargazer(fm1,fm2, type="text") ``` とし,texreg なら ```{r echo=false} library(texreg) screenreg(list(fm1,fm2)) ``` とする なお 一 発 変 換 を 犠 牲 にするなら html 形 式 で 出 力 してそれをコピペすれ ばよい もし texreg を 使 うなら 外 部 ファイルに 保 存 できる 例 えば 以 下 のようにすればよい htmlreg(list(fm1, fm2), file="mytable.doc", inline.css= FALSE, doctype=true, html.tag=true, head.tag=true, body.tag=true) また 次 のようにすれば,ひとつのファイルで3つのファイル 形 式 を 切 り 替 えて 表 を 出 力 することができる

25 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr title: "3フォーマット 対 応 文 書 " documentclass: bxjsarticle geometry: no output: word_document: default pdf_document: latex_engine: xelatex html_document: default classoption: xelatex, ja=standard --- ```{r, echo=false} library(knitr) out_type <-opts_knit$get("rmarkdown.pandoc.to") ``` データ `cars`を 用 いて 回 帰 分 析 を 実 行 する ```{r} fm0<-lm(dist~speed, data=cars) fm1<-lm(dist~speed + I(speed^2), data=cars) ``` 結 果 は 以 下 のとおりである ```{r, message=false,echo=false} library(stargazer) if (out_type == "docx") { ``` stargazer(fm0, fm1, type="text") }

26 162 ```{r, results='asis',echo=false} switch(out_type, html = stargazer(fm0,fm1, type="html"), latex = stargazer(fm0,fm1, header=false, float=false) ) ``` 5 その 他 く ここでは knitr についてのいくつかの 関 連 トピックスについて 述 べてい 5.1 外 部 エディタ RStudio はあまり 日 本 語 入 力 が 得 意 ではない 使 っている OS によって は, 日 本 語 入 力 中 に 入 力 状 況 が 全 く 表 示 されない 場 合 がある 日 本 語 入 力 に 不 満 があるなら, 別 のエディタで Rmdファイルを 編 集 すればよい RStudio でそのファイルを 開 いたままにしておいて, 外 部 エディタの 編 集 結 果 を 保 存 する RStudio のソース ウインドウを 選 択 すると 編 集 結 果 が 自 動 的 に 反 映 される RStudio 上 ではコードの 実 行 や knitr を 実 施 に 専 念 すればよい Rnw ファイルの 編 集 には tex ファイルの 編 集 に 使 ったエディタを 用 い ればよい 外 部 エディタについて に 色 々 書 かれている ここでの 設 定 だと 日 本 語 での 実 行 ができない 以 下 Texmaker で 使 用 するための 設 定 を 記 述 する Texmaker については 宮 﨑 (2015a)を 参 照 されたい

27 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 163 Texmaker ではまず [User]=>[User Commands]=>[Edit User Commands] を 実 施 して,[Menu Item] を knitr とする 次 に [Command] 欄 に, mac の 場 合, "/usr/local/bin/rscript" -e "knitr::knit2pdf('%.rnw', compiler='xelatex')" と 入 力 すればよい windows の 場 合, "C:/Program Files/R/R-*.*.*/bin/Rscript.exe" -e "knitr:: knit2pdf('%.rnw',compiler = 'xelatex')" にする Rmd ファイルの 編 集 の 場 合,マークダウン 形 式 に 対 応 したエディタが 多 数 ある たとえば Emacs, sublime text, Atom などである 私 は Emacs の markdown-mode+polymode+ess を 組 合 せて 使 っている ただ Emacs は20 年 以 上 前 の 古 いエディタなのでこれからはじめる 人 におすすめできない 私 見 であるが Atom ( が 今 後 主 流 になりそうである 5.2 外 部 ファイル Rnw ファイルや Rmd ファイルに R コードを 埋 め 込 まず, 外 部 ファイル を 読 み 込 むことができる 詳 しくは 以 下 のサイトを 参 考 されたい 例 えば hoge.r という 名 前 の 以 下 の 外 部 ファイルがあるとする ## ----test-a x = rnorm(10) ## ----test-b ----

28 164 mean(x) sd(x) ここで,ラベルとして,## ----ラベル 名 ---- とする これを 読 み 込 ませるには,まず, <<external-code, cache=false, echo=false>>= とすればよい チャンクオプションに cache=false と 指 定 しなければなら ない echo=false とすればインプットを 隠 すことができる そうして, 本 文 中 に, とすればよい 5.3 spin & stitch RStudio で R ファイルから, compile notebook ボタンをおせば,html ファイルなどを 生 成 してくれる これは knitr の spin というコマンドを 動 かしている R ファイルにおいて,#' で 始 まるものが R マークダウンファイルでの テキスト 行 に 読 み 替 えられる また #+ ではじまるものがチャンクオプシ ョンに 変 換 される たとえば 以 下 のファイル test.r があるとする #' --- #' title: "Sample Document"

29 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 165 #' --- #' # carsのプロット #' #' carsをプロットします #+ echo = FALSE # 通 常 のコメントはコメントとして 解 釈 されます plot(cars) #' #インラインコードの 書 き 方 です #' carsのサイズは {{dim(cars)}} #'です このとき 以 下 のコマンドを 実 行 する spin('test.r', FALSE) そうすると 以 下 のファイル test.rmd が 生 成 される --- title: "Sample Document" --- # carsのプロット carsをプロットします ```{r echo = FALSE} # 通 常 のコメントはコメントとして 解 釈 されます plot(cars) ``` #インラインコードの 書 き 方 です

30 166 carsのサイズは `r dim(cars)` です これより, 各 種 ファイルへ 変 換 することができる もしくは 直 接 RStudio の compile notebook ボタンをクリックすればよい R ファイルからドキュメントを 作 成 数 コマンドとして,spin() のほか に,stitch() がある これは spin() と 違 い, 予 めテンプレートを 作 成 し てそれをもとにドキュメントを 作 成 する 詳 しくはヘルプを 参 照 されたい まとめ この 研 究 ノートでは 再 現 能 研 究 のための R のパッケージを 紹 介 した tex ファイルに R コードを 埋 め 込 んだ Rnw ファイルだけでなく,マークダ ウン 記 法 に R コードを 埋 め 込 んだ Rmd ファイルについて,どのようにす ればよいかを 概 説 した とくに Rmdファイルでは 図 表 を pdf 形 式 だけでな く html 形 式 や docx 形 式 での 出 力 が 可 能 になることを 見 てきた 研 究 活 動 において 研 究 ノートと 論 文 は 同 じではない 研 究 ノートは 幾 つ かの 試 行 錯 誤 を 網 羅 的 にまとめたものである 一 方, 実 際 の 投 稿 論 文 では 研 究 ノートの 一 部 となることが 多 い Rmd ファイルは 扱 い 易 いが, 参 考 文 献 や 式 番 号 付 きの 数 式 表 示 などでいろいろ 面 倒 である そのため 研 究 ノ ートは Rmd ファイルで, 実 際 の 論 文 は Rnw ファイルにしておいたほうが 良 いだろう ただ Rmd ファイルの 計 算 手 順 をコピペするとミスが 起 こり うるので 避 けなければならない そのため, 次 のように2つのファイルを 使 い 分 ければよいだろう すべ ての 計 算 結 果 やメモを Rmd ファイルで 日 本 語 で 記 録 する たとえば hoge. Rmd とする これをもとに html ファイルを 生 成 し, 中 間 報 告 やすべての 計 算 を 実 施 する すべてのチャンクにラベルを 付 けておく

31 学 術 研 究 のためのオープンソース ソフトウェア(4):knitr 167 そうして, Rmd ファイルから R の 実 行 コマンドを 抽 出 する 具 体 的 にコ ンソール 上 で 以 下 を 実 行 する purl("hoge.rmd") そうして 生 成 したファイル hoge.r を 外 部 ファイルとする 英 語 もしく は 日 本 語 で Rnw の 論 文 を 作 成 して, 論 文 に 必 要 な 実 行 結 果 などを 適 宜 挿 入 する そうすれば, 再 現 可 能 な 論 文 が 作 成 できる 別 途 学 会 報 告 用 に 英 語 や 日 本 語 のプレゼンファイルも 必 要 であろう この 際 は 表 現 のコピペは 仕 方 ないにせよ, 計 算 過 程 はなるべく 単 一 で 実 施 すべきである プログラ ムの 世 界 で 知 られている DRY (Don t Repeat Yourself) 原 則 (ハント デ ビッド,2000)は 再 現 可 能 研 究 には 不 可 欠 である 実 は 私 は 論 文 作 成 のとき Rnw ファイルをほとんど 扱 わない さらに latex も 共 同 研 究 者 が latex しか 使 えないときにしか latex を 扱 わない 実 はそれをグラフィカルに 表 示 してくれる LyX というアプリケーションで 多 くの 作 業 を 実 施 している LyX は knitr と 連 動 して 外 部 ファイルを 読 み 込 んでくれる LyX については 次 回 紹 介 していきたい

32 168 参 考 文 献 Gandrud, Christopher (2015) Reproducible Research with R and R Studio, Boca Raton: Chapman and Hall/CRC, 2nd edition. Knuth, D. E. (1984) Literate Programming, The Computer Journal, Vol. 27, No. 2, pp , February, DOI: Koenker, Roger and Achim Zeileis (2009) On reproducible econometric research, Journal of Applied Econometrics, Vol. 24, No. 5, pp , August, DOI: Leisch, Friedrich (2002) Sweave: Dynamic Generation of Statistical Reports Using Literate Data Analy-sis, in Härdle, Wolfgang and Bernd Röz eds. Compstat, Heidelberg: Physica-Verlag HD, pp Ramsey, Norman (1994) Literate programming simplified, IEEE software, No. 5, pp Xie, Yihui (2015) Dynamic Documents with R and knitr, Boca Raton: Chapman and Hall/CRC, 2nd edition. 高 橋 康 介 (2014) ドキュメント プレゼンテーション 生 成, 共 立 出 版, 東 京. ハント,A. T.デビッド (2000) 達 人 プログラマー システム 開 発 の 職 人 から 名 匠 への 道,ピアソンエデュケーション,( 村 上 雅 章 訳 ). 宮 﨑 憲 治 (2015a) 学 術 研 究 のためのオープンソース ソフトウェア(1): XeLaTeX, 経 済 志 林, 第 82 巻, 第 4 号, 頁,3 月. (2015b) 学 術 研 究 のためのオープンソース ソフトウェア (2): BiBTeXと Zotero, 経 済 志 林, 第 83 巻, 第 2 号, 頁,3 月. (2016) 学 術 研 究 のためのオープンソース ソフトウェア (3): Rと RStudio, 経 済 志 林, 第 83 巻, 第 3 号,3 月.