盆暗の学習記録

データサイエンスを中心として,日々学んだことの備忘録としていく予定です。初心者であり独学なので内容には誤りが含まれる可能性が大いにあります。

[R]R markdownでコードからmarkdownを書く

よくR markdownを使っているのですが,

  • 変数に格納した文字列を見出しに使う
  • forループを使って複数の節や小見出しを作る

といったコードからmarkdownを書くという操作がしたくなるときが時折あります。

ちょっと調べてみたのでメモ。

文字

rチャンクのオプションをresults='asis'にして,表示したいmarkdownテキストをcat()で表示すればいいみたいです。

見出し

例えば,results='asis'をオプションに指定したチャンクで次のように書けば見出しを書くことができます。

# ```{r, results='asis'}
library(tidyverse)

# 見出し ---------
midashi <- c("夏目漱石","草枕")

# h2見出し
paste0("## ", midashi[1],"\n") %>% cat()
# h3見出し
paste0("### ", midashi[2],"\n") %>% cat()
# ```

結果はこのようになります

f:id:nigimitama:20190309000443p:plain

文章

同様にテキストも("\n"で改行することを意識しつつ)cat()で表示できます

# ```{r, results='asis'}
# テキスト -------
# <br>タグで改行できる
text <- c("智に働けば角が立つ。情に棹させば流される。意地を通せば窮屈だ。<br>とかくに人の世は住みにくい。",
          "住みにくさが高じると、安い所へ引き越したくなる。どこへ越しても住みにくいと悟った時、詩が生れて、画が出来る。")

# 1つ目のパラグラフ
i = 1
paste0("\n", text[i], "\n") %>% cat()

# 2つ目のパラグラフ
i = i + 1
paste0("\n", text[i], "\n") %>% cat()
# ```

先程の見出しに続けて文章を出力するとこうなります。

f:id:nigimitama:20190309000752p:plain

グラフ

グラフでxに指定している変数名を節の見出しに使いたいときとかによくこの手法をつかいます

例えばirisデータセットのnumeric型の4変数をforループで順次参照して

  1. 参照している列名で見出しを表示
  2. 参照している列名でグラフを描画

という処理を繰り返す場合は,次のように書くことができます。

# ```{r, results='asis'}
# 変数名ベクトルを用意
VAR_NAMES = iris[,1:4] %>% colnames()

# forループしながらplot
for(VAR in VAR_NAMES){
  # h2見出し
  paste0("\n## ", VAR,"\n") %>% cat()
  
  # plot
  g <- ggplot(iris, aes_string(x = VAR, fill = "Species"))+
      geom_histogram(position = "identity", alpha = 0.5, bins = 20)
  print(g)
  
  # 改行
  cat("\n")
}
# ```

実行結果は次の「2.1 Sepal.Length」節以下の部分になります。

Sepal.LengthからPetal.Widthまで4つの変数について,見出しの表示とヒストグラムの作成を行うことができています。

f:id:nigimitama:20190309002116p:plain

おわりに

グラフを書く以外にも,例えば手元に複数の結果変数(被説明変数)があるときに結果変数ごとに節を分けて回帰分析を行ってみたりといったように,

markdownの節の作成」と「分析の処理」をforループでまとめて記述することができるのでとても便利です。おすすめです。