DOING THINGS RIGHT

彩りのある生産的な日々を。

はてなブログにRのコードを出力結果とともに載せる方法【R Markdown】

はてなブログをR Markdownで書きたい!

先日、当ブログでRに関する記事を書いたのですが、その際ソースコードを載せる方法はわかっていたものの出力結果をどう表示したらいいかわからずに苦戦しましたので、備忘録もかねて解決策を書いておきます。

結論から言うと、「R MarkdownからMarkdownに変換、それをはてなブログ(Markdown記法)に貼り付け」です。なんで思いつかなかったんだろう。。。
なおここではR Markdownについて基本的な事項は既知とします。もし初めて聞いたという方には、以下の記事が参考になります。

kazutan.github.io

挑戦1:Gist貼り付け

akatak.hatenadiary.jp

ググっていて最初にたどり着いたのがこの方法。R MarkdownPython版(?)、Jupyter Notebookをはてなブログに貼り付けるというもの。
githubのgistにJupyter Notebookファイルを登録し、はてなブログの「Gist貼り付け」機能を使うわけですが、同じようにR Markdownファイルを登録しても出力結果は保存されません。後述しますが.mdファイルを登録しても、画像で出力される結果が表示されません。
gistに画像を添付するやり方があれば教えてください...

挑戦2:htmlを直接貼り付ける

R Markdownでは最終的にhtmlファイルが出力されるのは知っていたので、そのhtmlファイルのソースコードをクロームデベロッパーツールなりで開いて貼り付けようとしたのが2つめの挑戦です。
しかしはてなブログではhtmlで記事を書くには有料プラン「はてなブログPro」への登録が必要だったので泣く泣く断念。
WordPressの方なんかはこの方法もいいかもしれません。

staff.hatenablog.com

挑戦3:Markdownを貼り付ける

R Markdownは、knitによってMarkdownファイルに変換されたのち、pancocを通ってhtmlファイルに変換されています(知らなかった…)。
なのでR Markdownで記事を書いて、Markdownファイル(.md)に変換してしまえばあとはそれをはてなブログの編集タブ(Markdownモード)に貼り付けるだけです。

Markdownファイルを出力する方法はいろいろありますが、File→New File→R Markdownと選択すると出てくるいつもの画面で、
「From Template」からの「Github Document(Markdown)」を選択する方法が一番簡単でしょう。rmarkdownパッケージをインストールしておく必要があります。 f:id:syumituduri:20200225235012p:plain

これをいつも通りknitするといつも通りhtmlが表示されて、いつもと違って保存フォルダに.mdファイルが入っているはずです。
それをRStudioで開きコピペして貼り付ければだいたい完成です。

プロット等は別で貼り付け要

一つ問題なのが、プロットなどの画像。.mdファイルには画像は含まれていないので、Markdownファイルをそのまま渡してもローカルにあるプロットは載せてくれません。また、はてなブログでは記事に写真を載せる場合まずアップデートが必要です。
なので、.mdと同じフォルダに保存されている(ファイル名)_filesフォルダにそれらの画像が格納されているので、はてなブログにアップロードして貼り付け直します。


以下はそんなこんなで完成したサンプルです。
R Markdown開いたらデフォルトで入ってる例のサンプルをMarkdown変換して貼り付けてます。

R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

f:id:syumituduri:20200225195114p:plain

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.