11.10 R のソースコードを整形する

チャンクオプション tidy = TRUE を設定すると, formatR パッケージ (Xie 2021c)tidy_source() 関数によって R のソースコードが整形されます. tidy_source() 関数は, ほとんどの演算子の前後にスペースを追加する, 適切なインデントをする, 代入演算子 =<- に置き換えるなど, いくつかの観点でソースコードを整形します. チャンクオプション tidy.opts には formatR::tidy_source() に与えられる引数のリストが使えます. これが例です.

```{r, tidy=TRUE, tidy.opts=list(arrow=TRUE, indent=2)}
# 乱雑な R コード...
1+            1
x=1:10#代入演算子として '<-' を好むユーザーがいる
if(TRUE){
print('Hello world!') # スペース2個でインデントする
}
```

整形後の出力はこうなります.

# 乱雑な R コード...
1 + 1
x <- 1:10  #代入演算子として '<-' を好むユーザーがいる
if (TRUE) {
  print("Hello world!")  # スペース2個でインデントする
}

5.3節ではテキストの幅を制御する方法について言及しました. ソースコードの幅を制御したいなら, tidy = TRUE としたときに width.cutoff 引数を試してください. これが例です.

```{r, tidy=TRUE, tidy.opts=list(width.cutoff=50)}
# 長い式
1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
```

出力はこうなります.

# 長い式
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
  1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
  1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
  1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1

使用可能な引数を知るにはヘルプページ ?formatR::tidy_source を読んでください. そして https://yihui.org/formatR/ で使用例とこの関数の限界を理解してください.

tidy = styler を設定したなら, コード整形には代わりに styler パッケージ (Müller and Walthert 2021) が使われます. R コードは styler::style_text() 関数で整形されます. styler パッケージは formatR よりも豊富な機能を持ちます. 例えば, %>%, !!, {{ といった tidyverse 特有の構文が含まれていてもアラインメントを維持することができます. チャンクオプション tidy.optsstyler::style_text() へ引数を渡して使うこともできます. これが例です.

```{r, tidy='styler', tidy.opts=list(strict=FALSE)}
# 代入演算子のアラインメント
a   <- 1#one variable
abc <- 2#another variable
```

デフォルトでは tidy = FALSE であり, あなたのコードは整形されません.

参考文献

Müller, Kirill, and Lorenz Walthert. 2021. Styler: Non-Invasive Pretty Printing of r Code. https://CRAN.R-project.org/package=styler.
———. 2021c. formatR: Format r Code Automatically. https://github.com/yihui/formatR.