R 4.1で入るnative pipe(|>)の現状確認

いよいよR 4.1のリリースが迫っています。native pipeって何?という方は、以前書いたこの概要をご参照ください。後述するように「第一引数以外に渡したいときは関数でラップする」のところは多少進展がありましたが、基本的な部分は同じです。

(参考)R 4.1を試すには

R 4.0.4の日本語表示のバグみたいなのがないとも限らないので、余裕がある人はリリース候補版の動作確認をしておきましょう。 動作確認してくれー、という呼びかけを公式もしています。

macOSWindowsはそれぞれ以下からリリース候補版のRがダウンロードできます。macOSは(使ったことないですが)RSwitchってやつを使うとRのバージョンの切り替えが便利らしいです。

Linuxは、自分でビルドするか Docker を使いましょう。

docker run -it --rm rocker/r-base:4.1.0

第一引数以外に渡したいとき

さて、前回のおさらいとして、magrittr pipe(%>%)では、引数を渡したいのが関数の第一引数でない場合でも . を使うことができました。

2 %>%
  rep(1, .)

しかし、native pipe(|>)にはこの記法はありません。 代わりの方法がいろいろ議論されていましたが、今年の頭あたりにpipe bind(=>)という文法が提案され(参考:[Rd] [External] brief update on the pipe operator in R-devel)、この方向でいきそうです。 具体的にはこうなります。nの部分は一時的な変数名で、nでも.でもなんでも大丈夫です。

2 |>
  n => rep(1, n)

ただし、いろいろ未解決の部分が残っているので、R 4.1ではいちおう実装されているもののデフォルトでは無効になっています。 上のコードを実際に実行するとこういうエラーになります。

#> Error: '=>' is disabled; set '_R_USE_PIPEBIND_' envvar to a true value to enable it

指示通りにこの環境変数を設定すればいちおう使えるようになります。

Sys.setenv("_R_USE_PIPEBIND_" = "true")

2 |>
  n => rep(1, n)
#> [1] 1 1

まだドキュメントもない隠し機能状態なので使うのをおすすめはできないですが、 実装を取り除くのではなくこういう形で残したということは、まあ方向性はこれでいくのかなという気がします。 今後に期待という感じですね。

RStudioのキーボードショートカット

RStudioには%>%を入力するキーボードショートカットがあります。 Shift + + MmacOS)、またはShift + Ctrl + MWindows/Linux)です。

開発版のRStudioには、このキーボードショートカットで%>%を入力するか|>を入力するか選べるオプションが用意されています。 コマンドパレットに「pipe」とか入力すると出てくるでしょう。

f:id:yutannihilation:20210429191411p:plain

ちなみに、このオプションはまだpreview版にも来てなくて、↑はdaily buildで確認したスクリーンショットです。 実装されてからもうけっこう経ってるのに...

まとめ

備えよう。