R MarkdownでJuliaを使う

これはJulia Advent Calendar 2017 - Qiita 10日目の記事です。

Julia歴0.5日くらいの超初心者ですが、もうすぐR MarkdownでJuliaが使えるようになるので紹介します。

R Markdownとは?

ドキュメントとデータ分析が一体となったツールとして、Juliaユーザの方はおそらくJupyter Notebookになじみ深いかと思いますが、RにはR Markdownというものがあります。これはMarkdown記法にRのコードを合わせたものです。詳しい説明は、以下のサイトが参考になるかと思います:

コードチャンク

R Markdownは、Markdownドキュメント(を介してHTMLやPDFなど様々なドキュメント)を動的に生成するための形式です。その記法は基本的にはMarkdownですが、特殊な記法もあります。通常のMarkdownではコードブロックを

```r
1 + 1
```

のようにシンタックスハイライト用に言語名(r)を添えて書きます。R Markdownでは、コードブロックを

```{r}
1 + 1
```

のように波括弧{r}とともに書いておくと、このブロック内のコードが実行され、Markdownファイル生成時に結果が埋め込まれます。

```r
1 + 1
#> [1] 2
```

この実行可能なコードが書かれたブロックを「コードチャンク」と呼びます。

R以外のコードチャンク

さて、わざわざ{r}という書き方でRのチャンクであることを明示しないといけないのはなぜかというと、R以外の言語のコードも実行できるからです。

例えば、

```{python}
1 + 1
```

と書くと、これはPythonのコードとして実行されます。R Markdown(というより、R MarkdownMarkdownに変換するknitrパッケージ)がサポートしている言語は以下に詳しいです。

Juliaのコードチャンク

実はJuliaはまだサポートされていないんですが、もうすぐサポートされるようになります。

added a new engine julia based on JuliaCall::eng_juliacall() to support Julia code chunks (thanks, @Non-Contradiction, #1458)
(https://github.com/yihui/knitr/blob/33a3ba65771e2ebc37a403cb37f941f2c6660bfb/NEWS.md#new-features)

これはJuliaCallというRからJuliaを呼び出すパッケージによって実現されています。Juliaがネイティブにサポートされるようになるまでの間は、以下のような設定を冒頭に含める必要があります。

knitr::opts_chunk$set(echo = TRUE)
knitr::knit_engines$set(julia = JuliaCall::eng_juliacall)

こうしておくと、以下のR Markdownファイルから(2018/02/22 追記: teramonagiさんから指摘を受けてリンクを修正しました)

以下のHTMLが生成されます。Plots.jlの様々なバックエンドもちゃんと動作していることがわかります。

JuliaCallのインストール

  1. Juliaのインストール
  2. 環境変数JULIA_HOMEを設定し、パスを通す(手元のWindowsではC:\Users\ユーザ名\AppData\Local\Julia-X.X.X\binでした)
  3. install.packages("JuliaCall")

どうも1.、2.の前にJuliaCallをインストールしちゃうと変になる気がしました。RStudioが固まったこと数回...。そもそも、Juliaの起動にちょっと時間がかかるようなので、しばらく反応なくても待ちましょう。knitしたとき以下のような表示が出ればうまくいっているはずです。

label: unnamed-chunk-2 (with options) 
List of 1
 $ engine: chr "julia"

Julia version 0.6.1 at location C:\Users\user1\AppData\Local\Julia-0.6.1\bin will be used.
Julia initiation...
Finish Julia initiation.
Loading setup script for JuliaCall...
Finish loading setup script for JuliaCall.

RStudioとの連携はまだいまいち

knitするときは問題ないんですが、RStudioからインタラクティブに実行するときは変数が引き継がれないという問題があります。以下で知りました。

RStudio側でもPythonについて問題は認識していて、次期リリースのマイルストーンに含まれているようです。Juliaについても対応してくれることを祈りましょう。

感想

快適に使うには、速度とRStudioとの連携という面でまだ厳しそうでした。やっぱりJupyter Notebookにもっと慣れるかなあ...