- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-06-02T11:31:43+00:00","","")
#author("2019-06-09T12:58:51+00:00","","")
#mynavi(R言語の練習)
#setlinebreak(on);
* 目次 [#v98206d1]
#contents
- 関連
-- [[R言語入門]]
-- [[Rでグラフ描画]]
* 概要 [#z21a9a8c]
#html(<div style="padding-left: 10px;">)
#TODO
Rの集計、分析結果を Markdown形式で作成するための R Markdown というパッケージが提供されている。
レポートの形式は HTML の他に Word や PDF 等も対応しているが、当記事では HTML の生成についてのみ記載する。
#html(</div>)
* インストール [#e9922c4c]
#html(<div style="padding-left: 10px;">)
とりあえず rmarkdown と knitr をインストール。
尚、word文書等を作成する場合は pandoc も必要だが、当記事では扱わない為、インストールしない。
#myterm2(){{
install.packages("rmarkdown")
install.packages("knitr")
install.packages("reticulate") # コードチャンクを python などの他言語で書く場合は必要
}}
#html(</div>)
* 基本的な使い方 [#m7de42bf]
#html(<div style="padding-left: 10px;">)
Markdown 形式のファイルを拡張子 Rmd で作成し、render するだけ。
※Rmd の記述方法等は後述。
** .Rmd の作成 [#j36c88bb]
#html(<div style="padding-left: 10px;">)
sample.Rmd
#mycode2(){{
---
title: "Sample1"
author: "Daisuke.M"
date: '`r Sys.time()`'
output: html_document
---
```{r include = F, message = F, warning = F}
library(knitr)
```
```{r echo = F}
plot(iris$Sepal.Length, iris$Sepal.Width)
```
}}
#html(</div>)
** rmarkdown::render の実行 [#va9ef8ac]
#html(<div style="padding-left: 10px;">)
#myterm2(){{
library(rmarkdown)
render("sample.Rmd")
}}
#html(</div>)
#html(</div>)
* .Rmd の記述方法 [#o47815e8]
#html(<div style="padding-left: 10px;">)
** 基本設定 [#v81fdb6f]
#html(<div style="padding-left: 10px;">)
Rmd の先頭で --- から --- の間に基本的な設定を YAML形式で記述する。
参考
https://rmarkdown.rstudio.com/lesson-9.html
https://bookdown.org/yihui/rmarkdown/html-document.html
#mycode2(){{
---
title: "Sample1"
author: "Daisuke.M"
date: '`r Sys.time()`'
output:
html_document:
includes:
in_header: header.html
before_body: doc_prefix.html
after_body: doc_suffix.html
---
}}
#html(</div>)
** コードチャンク [#fb6f9ba9]
#html(<div style="padding-left: 10px;">)
コードチャンクにオプションを設定する事で、挙動の微調整ができる。
参考
https://rmarkdown.rstudio.com/lesson-3.html
https://yihui.name/knitr/options/
基本的なオプション
| オプション | 説明 |h
| include | コードの実行結果を出力内容に含めたくない場合は FALSE を指定する |
| echo | コード自体を出力内容に含めたくない場合は FALSE を指定する |
| message | コード実行時の message による出力を出力内容に含めたくない場合は FALSE を指定する |
| warning | コード実行時の warning による出力を出力内容に含めたくない場合は FALSE を指定する |
| fig.cap | グラフに付けたいキャプションを指定する(alt属性 及び pタグとして出力される) |
使用例)
#mycode2(){{
## 実行時のコードは出力しない
```{r echo = F}
plot(iris$Sepal.Length, iris$Sepal.Width)
```
## ファイルに出力
```{r echo = F, include = F}
png("plot1.png")
plot(iris$Sepal.Length, iris$Sepal.Width)
dev.off()
```
}}
#html(</div>)
** インラインコード [#ycde5ff3]
#html(<div style="padding-left: 10px;">)
前後をバックスラッシュで囲む事によってインラインコードを記述可能。
参考
https://rmarkdown.rstudio.com/lesson-4.html
#mycode2(){{
### 日付を出力
`r Sys.time()`
}}
尚、基本設定の YAML 部分に書く場合は シングルクォートで括る必要がある。
#mycode2(){{
---
:
date: '`r Sys.time()`'
:
---
}}
#html(</div>)
** パラメータ化 [#ia7ad294]
#html(<div style="padding-left: 10px;">)
Rmd 側で使用する値をパラメータ化しておいて、render 時に呼び出し側から渡す事が出来る。
参考: https://rmarkdown.rstudio.com/lesson-6.html
#TODO
#html(</div>)
** 表の描画 [#u0851c58]
#html(<div style="padding-left: 10px;">)
knitr::kable を使用すると データフレームの内容を HTML 等の表(table)として描画する事ができる。
参考
https://rmarkdown.rstudio.com/lesson-7.html
#mycode2(){{
```{r echo = F}
kable(head(iris, 10))
```
}}
#html(</div>)
** タブの描画 [#v283b545]
#html(<div style="padding-left: 10px;">)
出力が縦長になりすぎる場合などは、タブ化できる。
参考
https://bookdown.org/yihui/rmarkdown/html-document.html#tabbed-sections
#mycode2(){{
### タブの描画 {.tabset}
#### By Product
```{r echo = F}
plot(iris$Sepal.Length, iris$Sepal.Width)
```
#### By Region
```{r echo = F}
plot(iris$Petal.Length, iris$Petal.Width)
```
}}
#html(</div>)
** 基本的な Markdown記述 [#w25ea964]
#html(<div style="padding-left: 10px;">)
基本的な Markdown 記法はそこそこサポートしてる模様。
参考
https://rmarkdown.rstudio.com/lesson-8.html
#mycode2(){{
### Markdown記法
- リスト1
- **AAA**
- **BBB**
- リスト2
- **CCC**
- **DDD**
1. リスト1
- *AAA*
- *BBB*
1. リスト2
- *CCC*
- *DDD*
| col1 | col2 |
|:-----|:-----|
| val1 | val2 |
| val3 | val4 |
}}
#html(</div>)
** R以外の言語で書く場合 [#w8c393bf]
#html(<div style="padding-left: 10px;">)
python など他の言語でコードチャンクを書くための仕組みが提供されている。
参考
https://rmarkdown.rstudio.com/lesson-5.html
https://bookdown.org/yihui/rmarkdown/language-engines.html
sample.Rmd
#mycode2(){{
```{r include = F, message = F, warning = F}
library(knitr)
library(reticulate)
```
```{python}
x = [i for i in range(10)]
print(x)
```
}}
使用する python のパスを明示したい場合は、呼び出し側で use_python で設定するか、
コードチャンク側で {python, engine.path = '/usr/bin/python3'} のように指定する事も可能。
例) 呼び出し側で指定する場合
#mycode2(){{
library(rmarkdown)
library(knitr)
library(reticulate)
use_python("/usr/bin/python3")
render("sample1.Rmd")
}}
例) コードチャンク側で指定する場合
#mycode2(){{
```{python, engine.path = '/usr/bin/python3'}
x = [i for i in range(10)]
print(x)
```
}}
#html(</div>)
#html(</div>)
* サンプル [#u8449375]
#html(<div style="padding-left: 10px;">)
sample1.R
#mycode2(){{
library(rmarkdown)
render("rmarkdown/sample1.Rmd")
}}
sample1.Rmd
#mycode2(){{
#TODO
}}
header.html
#mycode2(){{
<link rel="stylesheet" href="style.css">
}}
doc_suffix.html
#mycode2(){{
<script src="script.js"></script>
}}
style.css
#mycode2(){{
#TODO
}}
script.js
#mycode2(){{
#TODO
}}
実行
#myterm2(){{
source("sample1.R")
}}
実行結果
#html(<div style="padding-left:10px;">)
#TODO
#html(</div>)
#html(</div>)
* 注意点 [#ce3ce288]
#html(<div style="padding-left:10px;">)
#TODO
#html(</div>)