備忘ログ

チラシの裏的備忘録&メモ

RStudioの`|>`と`%>%`のキーボードショートカットを共存させる方法のメモ(もちろん異なるキーボードショートカットキーで)

Rのパイプとして、{magritter}パッケージが提供する%>%とR 4.1.xからの|>があって、RStudioで、どちらか一方をキーボードショートカットとしてCtrl + Shift + Mに割り当てることができる。

どちらにするかはToolsのGlobal OptionのCodeのGeneralのところにある「Use naive pipe operetor, |> (requires R 4.1+)」のチェックを入れると|>になり、チェックをはずすと%>%になる。

基本的にはパイプを使ってコードを書くときに一つのコードの中にあまり混在させて書く必要性はないが、RStudioで設定していない方のパイプも使いたいということがたまにある。

例えば、普段は{base}のパイプを使って書いている場合で、少し前に書いたコードを少し修正して使いたいときに、そのコードが{magrittr}のパイプを使って書いているときに、一部修正箇所だけ{base}で書き直すのも微妙だなと思うときや、他の人と共有するコードで{magritter}のパイプを使ったほうが良さそうと判断した場合などがある(もちろん逆もしかり)。

このとき、1回や2回程度なら手入力で%>%と打ってもそれほど手間ではないが数回以上の場合はキーボードショートカットが欲しくなる。

かといって、RStudioの設定をわざわざ変更するのも手間だし、またすぐに戻すのに面倒くさい。

|>%>%のキーボードショートカットが共存する(もちろん異なるキーボードショートカットキーで)と嬉しい。

今回はそんな要望を満足させるための方法のメモ。

パッケージを使う

RStudioのAddinはパッケージで追加できるので、|>%>%を挿入するAddinを追加できるパッケージを導入するとできる。このAdd-inにショートカットを割り当てると万事要望が解決する。

で、作った。もうすでに世の中にこの要望を満たすパッケージはありそうだが、見つけられなかったので作ったほうが早いと思って作った。

(追記2022/04/29)

GitHub上でrstudio-addinというタグがあってそこを見てみたら、いくつかパイプ演算子を含む、演算子を挿入するaddin用のパッケージをいくつも見つけた。

タグで検索するといろいろパッケージがあったので探してみるのもよいと思う。

現在タグでヒットするものが78しかないのでそんなに多くないし。

(追記終了)

github.com

install.packages("remotes")
remotes::install_github("indenkun/addinfun")

でインストールできる。

インストールすると、RStudioのAddinsのところに、ADDINFUNという項目と、|>%>%のそれぞれを挿入するアドインが登録される。

こんな感じ。

{magritter}のパイプの場合。

{base}のパイプの場合

で、このアドインはToolsのAddinsのところでキーボードショートカットが設定できるので適当なキーボードショートカットをRStudioで設定していない方のパイプに設定すると、2つのパイプのキーボードショートカットが共存することができるようになる。

このAdd-inを消したかったらこのパッケージを消すと、このAdd-inがちゃんと消える。

野良パッケージを使いたくない人へ

https://rstudio.github.io/rstudioaddins/

RStudioのこのページで紹介されている通り、RStudioのAddinはパッケージの形で追加することができ、その中身はRの実行コードで実装されている。

このページや、{addinexample}などを参考に、自前でパッケージを用意すると実装できる。

細かい仕様にこだわらなければそんなに手間ではないと思う。

RStudioのキーボードショートカットについてはこちらを参照

https://support.rstudio.com/hc/en-us/articles/206382178?version=2022.02.1%2B461&mode=desktop

なぜこんな記事を書いたのか

たまたまRStudio Commynityを覗いたときに、すでに回答なしでClosedされていた投稿で、%>%|>を共存させる方法って、Addin導入すればいいの?と上に載せたAddin導入方法の説明ページのリンクを貼って聞いているものがあったので、そこに「そうだよ」と答えたかったが、すでにClosedだったので答えられなかったのでここに書いた(しかも日本語で、絶対この質問した人には届かない)。

community.rstudio.com

しかし、質問ではCtrl + Shift + Pでもう一つのパイプを共存させたいと言っていたが、Ctrl + Shift + Pは現在コマンドパレットの起動に割り当てられているので、任意のキーボードショートカットとして指定するとそちらが優先されるので、好みだとは思うが好ましい設定ではないと思った。

すこし変則的だが、Ctrl + Alt + Pあたりが現在割り当てられていない(?)のでちょうどいいかと思う、将来なにか割り当てられる可能性もあるけど(ほか何でも割り当てられていないキーボードショートカットなら何でもいいと思う)。

もしかしたら誰かこういう問題で躓いていたり、RStudio痒いところに手が届かないなと感ずる人がいるかもしれないし、Addinを追加したければパッケージを作成する必要があるところまでたどり着いてもパッケージ作成に少々の壁を感ずる人がいるかもしれないと思ったので書いた。