15 その他の言語

R Markdown は knitr を通して R 言語以外の多くのプログラミング言語をもサポートしています. 言語の名前は3連続のバッククオートの後のカーリーブレースの最初の単語で表現されます. 例えば ```{r} の小文字の r はコードチャンクに R のコードが含まれていることを意味し, ```{python} は Python のコードチャンクであることを表しています. この章ではあなたがあまり詳しくないであろういくつかの言語をお見せします.

knitr では, どの言語も言語エンジンを通してサポートされています. 言語エンジンは本質的にはソースコードとコードチャンクを入力として, 出力として文字列を返す関数です. これらは knitr::knit_engines オブジェクトで管理されています. 既存のエンジンはこのようにして確認することもできます.

names(knitr::knit_engines$get())
##  [1] "awk"       "bash"      "coffee"    "gawk"     
##  [5] "groovy"    "haskell"   "lein"      "mysql"    
##  [9] "node"      "octave"    "perl"      "psql"     
## [13] "Rscript"   "ruby"      "sas"       "scala"    
## [17] "sed"       "sh"        "stata"     "zsh"      
## [21] "highlight" "Rcpp"      "tikz"      "dot"      
## [25] "c"         "cc"        "fortran"   "fortran95"
## [29] "asy"       "cat"       "asis"      "stan"     
## [33] "block"     "block2"    "js"        "css"      
## [37] "sql"       "go"        "python"    "julia"    
## [41] "sass"      "scss"      "R"         "bslib"    
## [45] "targets"

現時点では, R 言語でないほとんどの言語はコードチャンクごとに独立して実行されます. 例えば, 同じ文書内の bash コードチャンクは全てそれぞれ別々のセッションで実行されるため, 後の bash コードチャンクはそれ以前の bash チャンクで作成された変数を使うことができませんし, cd による作業ディレクトリの変更も異なる bash チャンク間で維持できません. R, Python, そして Julia のコードチャンクのみが同一セッションで実行されます. 全ての R コードチャンクは同一の R セッションで実行され, 全ての Python コードチャンクは同一の Python セッションされ……, ということに注意してください. R セッションと Python セッションは2つの異なるセッションですが, 一方のセッションからもう一方のセッションのオブジェクトにアクセスしたり操作したりすることは可能です (15.2節参照).

R Markdown Definitive Guide (Xie, Allaire, and Grolemund 2018)Section 2.7 では Python, シェル, SQL, Rcpp, Stan, JavaScript, CSS, Julia, C そして Fortran のコードを使用する例が紹介されています. この章ではさらなる言語エンジンを紹介します. そしてさらなる例はリポジトリ https://github.com/yihui/knitr-examples で見られます. “engine” という単語を含むファイルを探してください.

初めに, カスタム言語エンジンの登録によってこれがどのように動作するかを解明しましょう.

参考文献

Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown.