R2DOCXによるレポート作成

RでMicrosoft Wordのレポートを作成するには,いくつかの方法がある.Markdown+Pandocを使った方法R2wdパッケージを用いた方法などである.ここでは,David Gohel氏によるR2DOCXパッケージを用いたレポート作成について取り上げる.

インストール

R2DOCXパッケージは,github上で公開されている.R2DOCXとともに,R2DOCパッケージもインストールする.Rのバージョンは3.0.0以降でなければならない模様.

> library(devtools)
> install_github('R2DOC', 'davidgohel')
> install_github('R2DOCX', 'davidgohel')

R2DOCXパッケージを使用するためには,JavaおよびrJavaパッケージがインストールされている環境が必要.

サンプルプログラム

まずは,チュートリアルサンプルプログラムを実行してみよう.

library(R2DOCX)
# 作成するドキュメント名
docx.file = "document.docx"
# ドキュメントの生成(Docx形式)
doc = new("Docx", title = "My example")
# irisデータセットの先頭10行をドキュメントに追加
doc = addTable(doc, iris[1:10,])
# スタイル名のついたテキストをドキュメントに追加
doc = addParagraph(doc, value="Hello World!", stylename="Normal")
# 図をドキュメントに追加
doc = addPlot(doc, function() plot(rnorm(10), rnorm(10)), width=10, height=8)
# ドキュメントの出力
writeDoc(doc, docx.file)

この結果,以下の内容のファイルが生成される.



提供する機能

R2DOXパッケージが提供する機能は下表のとおりである.

機能 関数
目次の作成 addTOC
図のプロット addPlot
外部画像データの挿入 addImages
表の出力 addTable
テキストの出力 addParagraph
章の見出しの作成 addHeader
改ページ pagebreak

以下では,各機能について説明する.

目次の作成

目次を作成するためには,addTOC関数を使用する.

# 作成するドキュメント名
docx.file = "document_toc.docx"
# ドキュメントの生成(Docx形式)
doc = new("Docx", title="My example")
# 目次の作成
doc = addTOC(doc)
# 1章の見出しの作成
doc = addHeader(doc, "Title 1", 1)
# 1.1章の見出しの作成
doc = addHeader(doc, "Title 1.1", 2)
# 改ページ
doc = addPageBreak(doc)
# 1.2章の見出しの作成
doc = addHeader(doc, "Title 1.2", 2)
# 改ページ
doc = addPageBreak(doc)
# 1.2.1章の見出しの作成
doc = addHeader(doc, "Title 1.2.1", 3)
# ドキュメントの出力
writeDoc(doc, docx.file)

以下のドキュメントが作成される.

図の描画

図を描画するには,addPlot関数を使用する.

doc = addPlot(doc, plot,
        x=rnorm(10), y=rnorm(10), main="main title",
        legend="graph example", stylename="PlotReference"
)

latticeパッケージやggplot2パッケージを用いて描画する場合は,第2引数にprint関数を指定すれば良い.

doc = addPlot(doc, print,
        x=qplot(Sepal.Length, Petal.Length, data=iris,
                color=Species, size=Petal.Width),
        legend="graph example", stylename="PlotReference"
)

両方を組み合わせることも可能.

doc = addPlot(doc, function() {
                print(qplot(Sepal.Length, Petal.Length,
                            data=iris, color=Species, size=Petal.Width))
                plot(x=rnorm(10), y=rnorm(10), main="main title")
              }, legend = "graph example", stylename="PlotReference"
)

外部画像データの挿入

外部の画像データを挿入するには,addImage関数を使用する.

doc = addImage(doc, "D:/img/image.png")

表の出力

表を出力するには,addTable関数を使用する.

ヘッダ名は引数header.labelsにlist型で指定する.

library(R2DOCX)

# 新規オブジェクトの作成
doc = new("Docx", title = "My example" )
# irisデータセットの1-5行目の出力
doc = addTable(doc , iris[1:5, ],
        header.labels = list(
          "Sepal.Length"="Sepal Length", "Sepal.Width"="Sepal Width",
          "Petal.Length"="Petal Length", "Petal.Width"="Petal Width",
          "Species" = "Species"
        )
)
# ファイルの出力
writeDoc(doc, "document.docx")

ヘッダのラベルをマージするには,grouped.cols引数にマージするヘッダを指定する.以下の例では,"Sepal.Length"と"Sepal.Width"をマージして"Sepal"に,"Petal.Length"と"Petal.Width"をマージして"Petal"にしている.

doc = addTable(doc, iris[1:5,],
        grouped.cols=list("Sepal"=c("Sepal.Length", "Sepal.Width"),
          "Petal"=c("Petal.Length", "Petal.Width"),
          "Species" = c("Species")
        )
)

同一内容のセルを列方向に結合するには,span.columns引数に結合する列名を指定する.

doc = addTable(doc,
        iris[46:55, c(5,1:4)],
        span.columns="Species"
)

フォントやセルに色を指定するには,col.fontcolors引数やcol.colors引数を指定すれば良い.

doc = addTable(doc,
        iris[ 1:5, ]
        col.fontcolors=list(Species=c("red", "blue", "red", "blue", "red")),
        col.colors=list(Sepal.Length=c("red", "blue", "red", "blue", "red"))
)

テキストの出力

単純なテキストの出力には,addParagraph関数を使用する.

doc = addParagraph(doc, "Hello World!", stylename="Normal")

引数stylenameに使用できるオプションについては,チュートリアルの該当ページを参照のこと.

addParagraph関数を用いて,

# テンプレートのテキスト
x = "[animal] eats [food]."

# フォーマットのプロパティの定義
textProp=textProperties(color="blue")
replacement.styles=list(animal=textProp, food=textProp)
# 置換するテキストの定義(animalをdonkeyに,foodをgrassに置換)
replacements=list(animal="donkey", food="grass")

# テキストの追加(出力は"donkey eats grass",donkeyとgrassが青字)
doc = addParagraph(doc, value=x, stylename="Normal",
        replacements=replacements,
        replacement.styles=replacement.styles
)

ベクトル化も可能.

x = c("text 1", "text 2")
doc = addParagraph(doc, value=x, stylename="Normal")