16.2 外部スクリプトをチャンク内で読み込む

16.1節で紹介した source() の方法には欠点があります. それはデフォルトではソースコードを見ることができないという点です. source(..., echo = TRUE) を使うことはできますが, ソースコードのシンタックスがきちんとハイライトされません. 加えて16.1節で言及したように, source()local 引数について注意を払う必要があります. この節ではこういった問題のない代わりになる方法を紹介します.

1つでも外部スクリプトがあれば, 基本的にはそれを読み込んで中身を, チャンクの code オプションに渡すことができます. code オプションは文字列ベクトルをとるので, それをコードチャンクの本文として扱えます. 以下に少しだけ例をお見せします.

  • code オプションはソースコードを文字列ベクトルとして取ることができます. これが例です.

    ```{r, code=c('1 + 1', 'if (TRUE) plot(cars)')}
    ```
  • 外部ファイルを読み込むこともできます.

    ```{r, code=xfun::read_utf8('your-script.R')}
    ```
  • ファイルを好きな数だけ読み込むこともできます.

    ```{r, include=FALSE}
    read_files <- function(files) {
      unlist(lapply(files, xfun::read_utf8))
    }
    ```
    
    ```{r, code=read_files(c('one.R', 'two.R'))}
    ```

他の言語のスクリプトも読み込めます. R Markdown で他の言語を使う方法は15章を確認してください. 以下に, もう少しだけ R 以外のコードの例をお見せします.

  • Python スクリプトを読み込む.

    ```{python, code=xfun::read_utf8('script.py')}
    ```
  • C++ ファイルを読み込む:

    ```{Rcpp, code=xfun::read_utf8('file.cpp')}
    ```

code オプションがあれば, お気に入りのエディタ使って複雑なコードを開発した上で, それを R Markdown 文書のコードチャンクに読み込ませるということができます.