★データ解析備忘録★

ゆる〜い技術メモ

r-libで気になるパッケージを列挙する

はじめに

この記事は R Advent Calendar 2021の18日目の記事です。

r-libとは

r-libは、Rの開発や環境(Environment; RStudioなどの実行環境とは異なる)を支えてくれるような、レイヤーが低めな部分を担当するパッケージを多く開発している組織です。

github.com

有名どころだとパッケージ開発で重宝する devtoolsusethisroxgen2pkgdownスクレイピング周りの基礎関数が実装されているhttr パッケージ等、よく使うパッケージの依存先になってるケースが多いです。

今回は何かの依存になっているわけでは無いパッケージを中心に(なってるのもありますが)気になる・好きなパッケージを列挙します。

好きなパッケージ

まずは好きなパッケージを上げてみます。 そこそこ有名なものもあり、すでに先人が詳しい解説をしてくれています。

withr

github.com

有名な使い方は、 set.seed() を書き忘れるとき対策(パイプの中で dplyr::sample_n() などシードに依存する関数を書くとき)に使う withr::with_seed() 関数です。

参考: 老化によるset.seed忘れを防ぎたい - 盆栽日記

here

github.com

Rでファイルを探すデフォルトの場所を指定するとき、setwd() で指定したり、RStudio Projectではプロジェクトのルートを自動的に見にいく機能があったりしますが、フォルダ構成が複雑だったりすると気づかないうちに相対パス絶対パスが混じったりすることもあり煩わしいです。

そんなときに here パッケージはいくつかの方法で「パスの文字列を作成」することができます。

# どちらも同じ結果になる
here::here("path/to/dir")
here::here("path", "to", "dir")

#> [1] "/Users/ymattu/path/to/dir"

参考: hereパッケージの導入でファイル参照のパス問題の悩みを解消 - cucumber flesh

keyring

github.com

Rコード中で認情報を使いたいけど、GitHubに上げるから認証キーはコード中に書きたくない、みたいなときに使うパッケージです。

keyringパッケージで認証情報を管理する - Qiita

lobstr

github.com

かなり低レイヤを扱えるパッケージです。例えば 1 + 2といった単純なコードについて、内部的にどのような動きをしてるのか可視化をしてくれるパッケージです。

lobstr::ast(1 + 2)

#> █─`+` 
#> ├─1 
#> └─2 

参考: 演算子の話

気になるパッケージ

mockery

github.com

R(パッケージ)の開発において、モックとスタブを司ることができるパッケージだそうです。 モックやスタブというのはソフトウェア開発で使われる用語ですが、以下のページがわかりやすいです。

https://wa3.i-3-i.info/word14933.html

waldo

github.com

Rのオブジェクトにおいて、2つのオブジェクトの差分を見てくれるパッケージです。主にベクトルの中身や、リストとやデータフレームではclassについて比較してるようです。 (下の実行結果では分かりづらいですが、RStudiodで実行すると差分に色が付きます。)

waldo::compare(c("a", "b", "c"), c("a", "b", "d"))
#> `old`: "a" "b" "c"
#> `new`: "a" "b" "d"

用途としてはアドホックな分析等でもそうですが、どちらかというと開発のテストとかで使うほうが向いてる気がします。

データフレームの中身同士の比較は他にいくつかのパッケージがあるそうで、そちらを使うほうが良さそうです。

bookdown.org