SlideShare a Scribd company logo
1 of 87
R Markdownによるドキュメント⽣成と
バージョン管理⼊⾨
⚔
第3回CAPS統計ワークショップ
紀ノ定 保礼
2018/8/23 (updated: 2018-08-24)
⾃⼰紹介
所属
静岡理工科大学 情報学部 講師
研究領域
主に認知 + 社会心理学の観点から、交通行動を
研究しています
人間工学
2 / 87
最近、本が出ました(4章:ggplot2による可視化を担当)
RユーザのためのRStudio[実践]入門
http://gihyo.jp/book/2018/978-4-7741-9853-8
3 / 87
本⽇の流れ
1. R Markdownとは
2. R Markdownによるレポーティングの利点
3. R Markdownによるレポーティングの手続き
4. R Markdownの実習と質疑応答
5. GitHub Desktopを用いたバージョン管理入門
4 / 87
参考図書
5 / 87
特にR Markdown: The Definitive Guideは必読!
https://bookdown.org/yihui/rmarkdown/
6 / 87
1. R Markdownとは
7 / 87
Markdownの記法を用いて、R上でドキュメントを
生成するシステム
ドキュメント構造を記述する、軽量マークアップ言語
例えば上記の文章は、以下のような記法を使用
<u>**Markdown**</u>の記法を用いて、R上でドキュメントを #←行末に半角スペース2つ
生成するシステム
- ドキュメント構造を記述する、軽量マークアップ言語
HTMLなら、記述量が増える
<u><em>Markdown</em></u>の記法を用いて、R上でドキュメントを<br>生成するシステム
<ul><li>ドキュメント構造を記述する、軽量マークアップ言語</li></ul>
8 / 87
ドキュメント例
9 / 87
Markdownには色々と種類があるが、
R Markdownで用いられているのはPandocのMarkdown
詳細はこちらから
https://pandoc.org/MANUAL.html#pandocs-markdown
10 / 87
PandocのMarkdown記法の例
R Markdownチートシートより
11 / 87
ドキュメント⽣成の流れ
1. .Rmdファイルを準備
2. 文章(Markdown記法で)や、Rチャンク(後述)を書く
3. Knitしてレンダリング(後述)
4. 出力されたドキュメントを確認し、必要に応じて2~4をループ
R Markdownチートシートより
https://www.rstudio.com/wp-content/uploads/2016/11/Rmarkdown-cheatsheet-2.0_ja.pdf
12 / 87
ドキュメント⼀覧
R Markdownチートシートより
https://www.rstudio.com/wp-content/uploads/2016/11/Rmarkdown-cheatsheet-2.0_ja.pdf
13 / 87
PDF化する際の注意点
PDF化したい場合は、TeX環境が必要(日本語を含む場合は、特に面倒)
そんなときはtinytex
参考:TinyTeXを使って10分で(R向けの)LaTeX環境を整える
https://qiita.com/nozma/items/1c6b000b674225fd40d7
14 / 87
プレゼンテーション⽤ドキュメント
本セミナーでは割愛するが、デフォルトで以下の形式が
用意されている
ioslides: あらゆるブラウザで閲覧可能なHTML形式
Slidy: あらゆるブラウザで閲覧可能なHTML形式
Beamer: PDF形式(TeXによる)
その他、xaringanパッケージにより、拡張性の高い
プレゼンテーション用ドキュメント作成も可能
https://github.com/yihui/xaringan
本資料もxaringanで(初めて)作成
15 / 87
2. R Markdownによる
レポーティングの利点
16 / 87
R Markdownがないとき
数値や図表を手作業でレポートへ反映させる
→ 入力ミス、違う図表の挿入など、
ヒューマンエラーが入り込むかもしれない
17 / 87
R Markdownがあるとき
日本社会心理学会 第5回春の方法論セミナー https://kazutan.github.io/JSSP2018_spring/
.Rmdファイルに記述した内容が自動的にレポートになる
仮にミスがあっても、その場所を特定・修正できる
バージョン管理していれば、時期も特定可能
18 / 87
参考映像:a reproducible workflow
https://youtu.be/s3JldKoA0zw
19 / 87
Shinyによる、インタラクティブな
レポーティング
library(tidyverse); library(plotly)
g <- ggplot(data = mtcars, mapping = aes(x = factor(cyl), y = wt)) +
stat_summary(fun.y = "mean", geom = "bar", alpha = 0.3) +
geom_point()
ggplotly(g)
4 6 8
0
2
4
factor(cyl)
wt
20 / 87
(番外編)Markdown記法を活⽤できる場所1
GitHub上でのやり取りも
21 / 87
(番外編)Markdown記法を活⽤できる場所2
はてなブログ等の記事の執筆も
22 / 87
3. R Markdownによる
レポーティングの⼿続き
23 / 87
とりあえずチートシートを手元に置きましょう
24 / 87
準備
新規.Rmdファイルを用意
ドキュメントの出力形式を選ぶ(後から変更可能)
25 / 87
パッケージをインストールしているなら、様々なテンプレート
を使用可能
→ ある程度「初期設定」が整っているので便利 26 / 87
論文も書けちゃう
{papaja}パッケージ
APAスタイルに特化したテンプレート
{rticles}パッケージ
Elsevier, Springer, PNASなど、主要な出版社・雑誌に対応
詳しくは、アカデミアのためのRSTUDIOを参照
https://ytake2.github.io/create.manuscript/RStudio_for_Academia.html 27 / 87
readthedownテンプレートの場合(rmdformatsパッケージ)
HTMLフォーマット
28 / 87
フロントマター(YAMLヘッド項⽬)
フロントマターに、ドキュメントに掲載する情報や
(例:日付、製作者)、出力形式の設定を書く 29 / 87
個⼈的によく使うYAMLヘッダ項⽬
---
title: "CAPS_RMarkdown"
subtitle: "hogehoge"
author: "Yasunori Kinosada"
date: "2018-08-24" #自動で本日の日付を取得するなら、`r Sys.Date()`
output:
rmdformats::readthedown:
highlight: zenburn #コードシンタックスのハイライト方法
md_extensions: -ascii_identifiers #日本語で書いている場合はおまじない
self_contained: true #jsやcss,画像データなどをhtmlファイルに埋め込む
lightbox: true #画像をクリックしたらポップアップさせる
toc: true #メニュー(toc: table of contents)を設ける
toc_float: true #tocを設けた場合に、ページ冒頭ではなく、サイドメニュー化
toc_depth: 3 #tocに反映させる見出しの階層数
---
もちろん他にもたくさんある
30 / 87
YAMLヘッダ項⽬⼀覧
多すぎるので全容は@kazutanの記事を参照
R Markdownのhtml_documentで指定できるyamlヘッダ項目について
https://qiita.com/kazutan/items/726e03dfcef1615ae999
31 / 87
PandocのMarkdown記法で地の⽂を書く
32 / 87
コードチャンク
地の文ではないコード部分は、まとまり単位でチャンクの
中に書き、チャンクオプションを併用することで、挙動を操作
33 / 87
新しいチャンクの準備
書きたい言語と対応するチャンクを選ぶ
→ チャンク冒頭に、各言語の名前が必要(Rチャンクなら{r})
34 / 87
{knitr}パッケージがサポートしている
⾔語エンジン⼀覧
names(knitr::knit_engines$get())
## [1] "awk" "bash" "coffee" "gawk" "groovy"
## [6] "haskell" "lein" "mysql" "node" "octave"
## [11] "perl" "psql" "Rscript" "ruby" "sas"
## [16] "scala" "sed" "sh" "stata" "zsh"
## [21] "highlight" "Rcpp" "tikz" "dot" "c"
## [26] "fortran" "fortran95" "asy" "cat" "asis"
## [31] "stan" "block" "block2" "js" "css"
## [36] "sql" "go" "python" "julia"
35 / 87
チャンク⽣成のショートカット
36 / 87
{r チャンクラベル(省略可), チャンクオプション1, チャンクオプション2, ...}
なおチャンクラベルには、アルファベット、数字、ダッシュ-のみ使用推奨
同一.Rmdファイル内で、同じチャンクラベルは使用不可
37 / 87
チャンクオプション⼀覧
R Markdownチートシートより
https://www.rstudio.com/wp-content/uploads/2016/11/Rmarkdown-cheatsheet-2.0_ja.pdf
38 / 87
各チャンクで指定するのが面倒なら、グローバルな設定も可
↓ readthedownテンプレートのデフォルトの設定
library(knitr)
library(rmdformats)
## Global options
options(max.print = "75")
opts_chunk$set(echo = FALSE,
cache = TRUE,
prompt = FALSE,
tidy = TRUE,
comment = NA,
message = FALSE,
warning = FALSE)
opts_knit$set(width = 75)
自分の場合は、echo = TRUEに変更して、この設定を使います
39 / 87
GUIでチャンクオプションを設定可能
? Chunk optionsを押すと、Webページが開いて詳細を確認可
40 / 87
チャンク単位で実⾏可能
41 / 87
実行時やレンダリング時の設定は変更可能
42 / 87
⾒出し
見出し(#の数で階層化可能)やチャンク名を付けると、
メニューが生成される 43 / 87
見出し(#の数で階層化可能)一覧も表示可能
44 / 87
画像の挿⼊
Rコード(ggplot2パッケージ等)で画像を生成するのではなく、
既存の画像を挿入する場合
方法1:Markdown記法(コードチャンク外に書く)
![alt text or image title](path/to/image)
![alt text or image title][hogehoge]
[hogehoge]: path/to/image
もちろんHTMLも可↓
<img src = "path/to/image" alt = "hogehoge" title="fugafuga" width="200" height="300">
45 / 87
方法2:knitrパッケージのinclude_graphics()
knitr::include_graphics("img/uchuhon.png")
Rコードなので、コードチャンク内に書く
画像のプロパティを、チャンクオプションで様々に操作可
46 / 87
表の⽣成
方法1:knitr::kable()(とりあえずこれでいい)
knitr::kable(x = head(mtcars, 2),
format = "html",
digits = 2,
align = "c",
caption = "two rows of mtcars dataset")
two rows of mtcars dataset
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda
RX4
21 6 160 110 3.9 2.62 16.46 0 1 4 4
Mazda
RX4 Wag
21 6 160 110 3.9 2.88 17.02 0 1 4 4
47 / 87
方法2:自力で書く
knitr::kable()を、Markdown形式でコンソールに
出力させると...
実はこれが、表のMarkdown記法
:----- 左揃え
:----: 中央揃え
-----: 右揃え
48 / 87
Data.frameの表⽰
行数が少なければknitr::kable()でよいが、多いと場所をとる
→ フロントマターで、df_printを"paged"に変更
49 / 87
⾏が多すぎて省略される場合でも...
50 / 87
クラスをdata.frameにしてしまえば、
df_print: "paged"で全行表示可
※broom::tidy()は出力をdata.frameにする関数 51 / 87
インラインコード・数式の表⽰
値を書き写す手間・必要が一切不要
TeXと同じ記法で数式を書ける
52 / 87
書きあがったらKnit(レンダリング)
outputのフォーマットに応じて出力される
53 / 87
どんっ!
54 / 87
5. Gitによるバージョン管理
55 / 87
バージョン管理の重要性
R Markdownを使いさえすれば再現可能性が担保される...
わけではない
どっちのファイルだっけ...
最終更新日時は分かるけど、どこを書き換えたんだっけ...
56 / 87
Gitによるバージョン管理
http://journals.sagepub.com/doi/abs/10.1177/2515245918754826
57 / 87
⽤語の整理
Git : バージョン管理システム
リポジトリでの変更履歴を記録するツール
GitHub : リモートリポジトリ
Web上のサービス
リポジトリ : バージョン管理する「場所」
ローカルリポジトリ : クライアントPC内のリポジトリ
リモートリポジトリ : GitHubなど、サーバ上のリポジトリ
Publicリポジトリ : 誰にでも公開
Privateリポジトリ : 許可されたユーザのみアクセス可能
58 / 87
GitHubのアカウントを取得
GitHubアカウントを取得(Publicリポジトリで良いならこれだけで良い)
GitHub Educationに申請するなら、研究者・教育者・学生などは
職場や学校のメールアドレスを登録するとよい
GitHub Educationの利用申請(Privateリポジトリを作成したいなら)
研究・教育目的など、Privateリポジトリが必要な理由を申請
https://qiita.com/mtfum/items/d8c06c9a28ce04d3043a 59 / 87
Gitのインストール & 個⼈情報を設定
WindowsとMacではインストール後の手続きが異なるので注意
初心者でもWindowsやMacでできる、Gitのインストールと基本的な使い方
http://www.atmarkit.co.jp/ait/articles/1603/31/news026.html
60 / 87
本セミナーではGitHub Desktopを紹介
https://desktop.github.com/
最低限の機能に制限されているが、そのぶん初心者向き
あわせてGit環境も自動的にインストールされる
61 / 87
GitHub上で、新しいリポジトリを作成
注意 : 一度publicにしたリポジトリは、privateにできない 62 / 87
そこに新しいリポジトリがあるじゃろ
63 / 87
それをローカルにクローンしてくる
64 / 87
確かに一致!
65 / 87
もちろん他人が作った(public)リポジトリでも
方法1:パスをコピーして、任意のローカルリポジトリに紐づける
方法2:Download ZIPを押して、全ファイルをZIPフォルダで一括DL
66 / 87
方法1:パスをコピーした場合
クローニング元としてURLを入力するだけ
67 / 87
ファイルの変更
仮にこういうファイルを追加したら...
新しい記述は緑の枠で表示される
68 / 87
仮にファイルに変更があったとしたら...
問題が無ければ、更新内容の概要をメッセージに書いて
commit
69 / 87
そしてpush!
→ commitしたローカルの変更内容を、リモートリポジトリ
(GitHub等)に反映させる
もし別のPC等でも作業していて、リモートリポジトリが更新されていたら
最初にpullして、ローカルリポジトリを最新の状態にすることを忘れずに
(もっとも、GitHub Desktopなら自ずとその手順になる)
70 / 87
push前なら、Undoでcommitを取り消しできる
71 / 87
push後に、GitHub上で確認してみよう
72 / 87
いつ何を変更したか分かるから、安心
73 / 87
push後に特定の時点のcommitに戻りたい!という場合は...
GitHub Desktop上で、当該commitを右クリック
→ revertで時を遡る
74 / 87
branch
大きな更新をいきなりpushするのは不安...
他者と共同作業している場合、勝手に更新されるのは困る
etc...
ならパラレルワールドを作って、そこで更新してみて、
その更新で良さそうなら反映させたらいいじゃない
→ それがbranch(枝)という発想
75 / 87
最初はmaster branchという大樹の幹で仕事している
76 / 87
パラレルワールドを作り、大樹に迷惑をかけずに好き勝手する
77 / 87
新しいbranchでファイル(practice2.R)を追加したとする
78 / 87
でもmaster branchは無傷!
(practice2.Rというファイルが無い)
79 / 87
Pull request
現在のbranchでのcommitが良さそうなら、
master branchと合体して大樹に戻りたい!
「このbranchを吸収(pull)しておくれ」とmasterに要請
→pull request
80 / 87
更新内容に問題なければ、Create pull request
81 / 87
Merge
pull requestを受けた側は、当該branchでの更新内容に
異存なければ、「よかろう、取り込んでやろう」
→ Merge
82 / 87
この場合は、branchからmasterへmergeしたので、
masterにpractice2.Rファイルが無事追加されている
83 / 87
Gitによるバージョン管理の⼿続き︓まとめ
1. 最新の状態をリモートからローカルにpull
2. branchを作って、パラレルワールドを創出
3. ローカルで作業して更新内容をcommit
4. pushしてリモートリポジトリに更新を反映
(commitを取り消したければrevert)
5. 枝(branch)がある程度育ったら、大樹(master)に
吸収を要請(pull request)
6. 大樹(master)は、吸収の要請(pull request)を
承認したら、統合(merge)
GitHub Desktopでは機能制限されているが、
Gitなら他にも、もっともっとコマンドがある
84 / 87
総括
85 / 87
今回の企画趣旨
「分析」と「レポート作成」のパッケージ化
RMarkdownの活用
再現可能性の確保
RMarkdownの活用 + Git等によるバージョン管理
86 / 87
Enjoy!
ご質問等があれば、遠慮なくご連絡ください
87 / 87

More Related Content

What's hot

階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門
shima o
 

What's hot (20)

階層ベイズとWAIC
階層ベイズとWAIC階層ベイズとWAIC
階層ベイズとWAIC
 
正準相関分析
正準相関分析正準相関分析
正準相関分析
 
木と電話と選挙(causalTree)
木と電話と選挙(causalTree)木と電話と選挙(causalTree)
木と電話と選挙(causalTree)
 
質的変数の相関・因子分析
質的変数の相関・因子分析質的変数の相関・因子分析
質的変数の相関・因子分析
 
関数データ解析の概要とその方法
関数データ解析の概要とその方法関数データ解析の概要とその方法
関数データ解析の概要とその方法
 
Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2
 
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしないPyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
 
因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説
 
階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門
 
時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?時系列予測にTransformerを使うのは有効か?
時系列予測にTransformerを使うのは有効か?
 
Chapter2.3.6
Chapter2.3.6Chapter2.3.6
Chapter2.3.6
 
Rで因子分析 商用ソフトで実行できない因子分析のあれこれ
Rで因子分析 商用ソフトで実行できない因子分析のあれこれRで因子分析 商用ソフトで実行できない因子分析のあれこれ
Rで因子分析 商用ソフトで実行できない因子分析のあれこれ
 
MCMCと正規分布の推測
MCMCと正規分布の推測MCMCと正規分布の推測
MCMCと正規分布の推測
 
金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデル金融時系列のための深層t過程回帰モデル
金融時系列のための深層t過程回帰モデル
 
分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~分散学習のあれこれ~データパラレルからモデルパラレルまで~
分散学習のあれこれ~データパラレルからモデルパラレルまで~
 
生存時間分析数理の基礎
生存時間分析数理の基礎生存時間分析数理の基礎
生存時間分析数理の基礎
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明
 
異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知
 
機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)
 
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
 

Similar to R Markdownによるドキュメント生成と バージョン管理入門

Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
Satomi Tsujita
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
Shinpei Ohtani
 

Similar to R Markdownによるドキュメント生成と バージョン管理入門 (20)

メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
 
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはdebexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするには
 
Hadoopカンファレンス20140707
Hadoopカンファレンス20140707Hadoopカンファレンス20140707
Hadoopカンファレンス20140707
 
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要NuGet でゲット! Visual Studio パッケージ マネージャ―概要
NuGet でゲット! Visual Studio パッケージ マネージャ―概要
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
 
Tokyo r33 beginner
Tokyo r33 beginnerTokyo r33 beginner
Tokyo r33 beginner
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京
 
Tokyo r50 beginner_2
Tokyo r50 beginner_2Tokyo r50 beginner_2
Tokyo r50 beginner_2
 
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3editionRails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
pi-6. 繰り返し
pi-6. 繰り返しpi-6. 繰り返し
pi-6. 繰り返し
 
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
文献紹介:SegFormer: Simple and Efficient Design for Semantic Segmentation with Tr...
 
文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...
文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...
文献紹介:Extreme Low-Resolution Activity Recognition Using a Super-Resolution-Ori...
 
Spock's world
Spock's worldSpock's world
Spock's world
 
ggplot2をつかってみよう
ggplot2をつかってみようggplot2をつかってみよう
ggplot2をつかってみよう
 
20181110 fok2018-pg-extension
20181110 fok2018-pg-extension20181110 fok2018-pg-extension
20181110 fok2018-pg-extension
 

R Markdownによるドキュメント生成と バージョン管理入門