niszetの日記

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

(R) 僕たちはいつだってpipeを使いたい

あるいは自作パッケージ中で外のパッケージの関数を使うための方法?

先日、キャプテンと羽鳥のやり取り、

とその元になった記事

petermeissner.de

があったので、忘れないようにメモ。

最近のパッケージは他のパッケージで使われている関数をそのままexportしているものが結構ある。と思う。

pipe、'%>%'、つかいはじめるまでは取っつきにくいものの、使い慣れてくるともうこれがない世界に戻れない…という気持ちになったりならなかったりと噂のアイツですが、多くのパッケージがpipe friendlyになっていくなかで自作のパッケージもやっぱり対応したいし、自分のパッケージ内でも%>%が使えるようにしたいし、アタッチしたらコンソール上で'%>%'を使えるようにしたいですよね1。 その答えが参照している記事なのですが、 Hadleyが呟いているように、 usethis::use_pipe()を使うことで記事中で書かれているコードとほぼ同等のものが生成されます。ロード順が気になる場合はファイル名は変えた方が良いですが。

usethisパッケージにはこの他にも便利な関数が揃っていて、使えない宗教的な理由等がなければ積極的に使った方が良いと思います。ちなみに、先日のggbodeパッケージでもggplot2::aesを使いたくて同じようなことをしていました。

ひとつ注意なのは、最後のNULLで、Rのコードが含まれていない(すべての行がコメントとか)場合はパッケージのビルド時に無視されるようで、私はコレで半日ハマっていました。実質NULLは何もしないので副作用等もなく安心です。usethis::use_pipe()ではこの点がもちろん考慮されているので、他の関数を使いたいなぁ~というときもこのファイルをコピペして適宜修正するのが良いかと思います。

しかし、この方法を使うためにはroxygen2にNAMESPACEの管理を任せる必要があり、それはCtrl+Shift+Dによるドキュメント生成を有効にする必要があることを意味していて、そのためにはRStudio IDEの設定を少し変更する必要があります。

なので、usethisを使った📦作成についてはちょっと別記事でまとめようかな…。たまにしか使わないのでいつも「あれ?動かねぇ…」となるので、そろそろまとめ時。

というわけで、Stay tuned!

Enjoy!!


  1. いちいちlibrary(magrittr)したくないのですよ~