niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

(R) stylerパッケージでRのコードを整形する時は注意が必要…(日本語含む場合は特に注意->windows版だけ?(追記))→3/4時点で解決していることを確認済

追記。

この記事を書いた当時、1/23ではwindows上でかつファイル中に日本語が含まれている場合には注意が必要だったのですが、内部の依存パッケージencのバージョンアップ(CRAN上では3/3にVersion 0.2.0になっている)に伴い解決したようです。styler自体は更新する必要はないはずで、encだけ更新しても良いかもしれませんが、install.packages("styler")で入れなおしても良いかもしれません。
当時の記録を残すということで記事は残しておきます。
stylerの使い方についてはまた別に記事を書き直します。

yutannihilationさん、encにも…!sugoi

github.com

usethisと一緒に入っていた。

昨年12/11時点でCRANに1.0.0として登録されていたようです。

使い方は下記のstylerの公式サイトを参照するとよさそうです。

Non-Invasive Pretty Printing of R Code • styler

...で終わるのはさみしいので、試しに先のページにあるコードを実行してみると、

ugly_code <- "a<-function( x){1+1}           "
style_text(ugly_code)
#> a <- function(x) {
#>   1 + 1
#> }

確かになりました1! これは下記の記事のリンクにある、

The tidyverse style guide style.tidyverse.org

2.2 Spacing のルールに沿ってますね2

  • = の前後に1文字の空白を入れる
  • 中置(infix)演算子も空白で囲われるべき。
  • ただし^, :, ::, :::については除く
  • ,のあとには常に空白を入れる。,の前には入れない(英語と同じ)
  • イレギュラーな空白の代わりに()で優先順位を強調する
  • 関数呼び出しの一部でない場合は(の前に空白を入れる
  • <- や = を揃えるために、追加で空白を入れてもよい。
  • ()や[]の中には空白をいれない。,の場合は直後に空白を入れるルールはそのまま残る

などなど。

で、こうなってくると気になるのは日本語対応ですよ。
適当なプロジェクトにtest.rというファイルをつくり、適当に下記を入力して保存します。

a<-1<-0 ; c =2
# aaaaa



# おおおおおおお



で、styler::style_file("test.r")と書いて実行すると…?

styler::style_file("test.r")
#> Styling  1  files:
#>  test.r i 
#> ----------------------------------------
#> Status   Count   Legend 
#> √  0   File unchanged.
#> i    1   File changed.
#> x    0   Styling threw an eror.
#> ----------------------------------------
#> Please review the changes carefully!

と表示され、実行結果(test.r)の中身は

a <- 1

c <- 2
# aaaaa




あらすっきr…。

oh...

どうやら日本語を含む場合はコメントであっても消えてしまうようです。また、;は許してくれないし、 = は <- に変えられてしまうようですね。
なお、拡張子は.rではなくて.Rが推奨されています。ただしこの関数で名前を変えてくれるわけではないようです(まぁその方が正しそうですけどね)

stylerはカスタマイズ可能なようで、先のgithub.ioのArticlesからCustomizing stylerを選択して、下記を参照してください(私はまだ触ってないので使い方わかりませんが…)

Customizing styler • styler

ただし、説明の最初の方を見るとAST作って云々とあるので、そこで既に日本語が弾かれている可能性があるのでその場合はどうしようもないですね(いずれ見てみますが…)

ということで、sytlerは使用時に注意が必要ですよ、ということでした。

追記

本件、yutannnihilationさんに拾っていただいて、issue建てていただきました。

github.com

どうもやりとりを見る限り、windows限定っぽいです。R、windowsで日本語扱うの苦手過ぎでは…

逆に、R/windows環境を持っている方、開発中/正式リリース直後のパッケージをちょっと触ってみるとパッケージの開発に貢献できるかもしれませんね。
ちょっとこのissue参考に、自分でも報告できるように頑張ります…!

Enjoy!!


  1. そらそうだ。

  2. 以下は適当に私がまとめているものなので原文読みましょう。英語だとa spaceで空白1字と明確になるのは便利だなぁ。下記の訳?では曖昧になってます。