パッケージとは何か
パッケージは、R を拡張する関数、ドキュメント、ときにはデータをまとめた束です。base R はベクトル、モデル、プロットを提供し、パッケージはそれ以外のすべてを提供します — そしてその「それ以外」は膨大です。CRAN(Comprehensive R Archive Network)はおよそ 2 万のパッケージをホストしており、そのすべてが公開前に CRAN の投稿テストで検査されています。このリポジトリこそ、R がデータ分析の分野で競争力を保ち続けている主な理由です。どんな分析であれ、たいてい誰かがパッケージにしています。
CRAN が唯一の供給源というわけではありません — Bioconductor はバイオインフォマティクスのエコシステムをホストし、開発中のパッケージの多くは GitHub にあります(remotes::install_github() でインストールできます)。しかし初心者のうちは CRAN を既定とみなし、それ以外は README にそう書かれたときに出会うもの、と考えて構いません。
一部のパッケージは R 自体に 同梱 されており(stats, utils, graphics など)、自動的に読み込まれます。mean() や plot() がそのまま動くのはそのためです。それ以外はすべて、以下の 2 段階の作法に従います。
install.packages() は 1 回、library() は毎セッション
これは初心者が混乱する第 1 位なので、できる限り明快に述べます。パッケージを使えるようにするのは、寿命の異なる 2 つの別々の行為 です。
install.packages("dplyr") # ONCE per machine: downloads from CRAN and installs
library(dplyr) # EVERY session: loads it so your code can use it
install.packages("dplyr")は本を買うようなものです。1 回やれば、以後は棚(ディスク)に置かれたままです。引用符 に注意してください — 名前を文字列として渡します。library(dplyr)は棚から本を取り出すようなものです。R セッションを始めるたびに(実際にはすべてのスクリプトの先頭で)行います。ここでは引用符は不要です —library()は特別で、裸の名前を受け取ります(一貫性を好むならlibrary("dplyr")も動きます)。
2 つの失敗パターンが、どちらの手順を飛ばしたかを教えてくれます。library() からの Error: there is no package called 'dplyr' は、そもそもインストールされていないという意味です。スクリプトの途中で出る Error: could not find function "filter"(あるいは "%>%")は、パッケージはインストールされているのにこのセッションで読み込まれていないという意味です。すべての library() 呼び出しをスクリプトのいちばん上に置き、あちこちに散らさないことで、2 つ目の失敗が最初の 1 秒で見えるようになり、同時にスクリプトの依存関係一覧としても機能します。tidyverse のインストールも同じ要領です。install.packages("tidyverse") を 1 回、セッションごとに library(tidyverse)。これで dplyr、ggplot2、その他のコア一式が 1 行で読み込まれます。
やってはいけない のは、繰り返し実行したり共有したりするスクリプトの中に install.packages() を残すことです。実行のたびに再ダウンロードし、実行する人を驚かせるおそれがあります。インストールはコンソールの行為であり、読み込みはスクリプトの行為です。
require() と pkg::fun()
require() は library() の同義語のように見え、そのように誤用されることがよくあります。違いはパッケージが見つからないときに起こることです。library() は エラーで停止 します。require() は警告を出し、FALSE を返し、スクリプトを続行させます — そして通常は 20 行先で、正直な「no package called」ではなく紛らわしい「could not find function」で落ちます。依存関係の読み込みには library() を使いましょう。先頭で大きな声で失敗するのは機能です。require() が価値を持つのは、戻り値そのものが要点となる条件チェックの中だけです。
if (!require(praise)) {
install.packages("praise")
library(praise)
}
パッケージを まったく読み込まずに 使う方法もあります。:: 演算子はフルアドレス package::function() で 1 つの関数を呼び出します。パッケージはインストールされている必要がありますが、セッションには何も付加されません。
(stats はいずれにせよ自動で読み込まれるので素の sd() でも動きますが、構文はインストール済みの任意のパッケージで同じです。):: は 2 つの場面で輝きます。library() の 1 行が大げさすぎる 1 回限りの呼び出しと、読み込み済みの 2 つのパッケージが同じ名前をエクスポートしているときの曖昧さ解消です — dplyr::filter() と stats::filter() が典型的な衝突です。
パッケージを最新に保つ
パッケージは R とは独立に進化するので、更新は自分の責任です。
update.packages() # offers to update everything outdated
update.packages(ask = FALSE) # same, without prompting per package
自明でない規則が 1 つあります。パッケージは特定の メジャー.マイナー バージョンの R に対してビルドされます。R 自体をアップグレードすると(たとえば 4.3 から 4.4 へ。R のインストール を参照)、古いパッケージライブラリは通常引き継がれず、対処は単純に、新しいバージョンで使うパッケージを再インストールすることです。install.packages() に 10 分かかるだけで、災難ではありません — が、新しくインストールした R がスクリプトを「no package called」エラーの壁で迎えると、初回はみな驚きます。
何が入っているかを見る
「何がどこにインストールされているか」に答える関数が 3 つあります。
installed.packages()[, "Version"] # every installed package with its version
sessionInfo() # R version + what THIS session has loaded
.libPaths() # the folders where packages are installed
installed.packages() はパッケージごとに 1 行の行列を返します。通常ほしいのは Version の列です。sessionInfo() は再現性のための道具です。その出力をバグ報告に貼り付ければ、読み手はあなたの R のバージョン、OS、読み込まれた各パッケージの正確なバージョンを把握できます。.libPaths() は R が検索するライブラリのフォルダを表示します。これがあると知っておくだけで、「あのパッケージは結局どこへ行ったのか?」や、共有マシンで管理者権限が問題になることがある理由が腑に落ちます。
知っておく価値のあるパッケージ
今日必要になるわけではありませんが、常に出会うことになります。それぞれが 何のためのもの かを知っておくと、他人のコードを読むのに役立ちます。
- dplyr — データ操作の動詞群:
filter,mutate,group_by,summarize。 - ggplot2 — 標準的な作図パッケージ。ネットで見かける R のグラフィックスの大半は ggplot2 です。
- tidyr — 横持ちと縦持ちの間でデータを整形します(
pivot_longer,pivot_wider)。 - readr / readxl — それぞれ高速な CSV 読み込みと Excel ファイルの読み込み。
- lubridate — 期待どおりに振る舞う日付。
- stringr — 一貫性のある文字列操作。
- data.table — 高性能なもう 1 つのデータフレームのエコシステム。tidyverse とは別の方言で、大規模データで愛されています。
- shiny — R だけで書けるインタラクティブな Web アプリ。
最初の 6 つは tidyverse の中核で、install.packages("tidyverse") でまとめて入ります。これらを使う義務はありません — base R でもすべてできます — が、現代の R コードの多くはこのエコシステムの中にあります。
この記事のまとめ
- CRAN は約 2 万の検査済みパッケージをホストし、残りは Bioconductor と GitHub がカバーします。
install.packages("name")はマシンごとに 1 回(引用符が必要)、library(name)はセッションごとに 1 回、スクリプトの先頭で。library()は大きな声で失敗します — これは良いことです。require()はFALSEを返し、チェックの中でのみ役立ちます。pkg::fun()はパッケージを付加せずに 1 つの関数を使い、名前の衝突を解消します。update.packages()で最新に保ちましょう。R のメジャーアップグレードはパッケージの再インストールを意味します。sessionInfo()は、自分のコードが何の上で動いたのかを誰か(あるいは未来の自分)に正確に伝える方法です。
次は 作業ディレクトリ — R がファイルを探す場所と、データの読み込みに失敗したときに真っ先に確認すべき理由です。
よくある質問
R でパッケージをインストールするにはどうすればよいですか?
パッケージ名を引用符で囲んで install.packages("name") を実行します。例: install.packages("dplyr")。R が CRAN からダウンロードし、あなたのマシンにインストールします。これはマシンごとに 1 回だけで、その後は各セッションで library(dplyr) を使って読み込みます。
install.packages() と library() の違いは何ですか?
install.packages("dplyr") はパッケージをコンピュータにダウンロードします — マシンごとに 1 回です。library(dplyr) はインストール済みのパッケージを現在のセッションに読み込みます — セッションごとに 1 回、通常はすべてのスクリプトの先頭で行います。インストールしても読み込まなければ何も使えず、インストールせずに読み込むと「there is no package called 'dplyr'」というエラーになります。
R の library() と require() の違いは何ですか?
どちらもパッケージを読み込みますが、失敗時に library() はエラーで停止するのに対し、require() は警告を出して FALSE を返すだけです。そのため library() はスクリプト向き(大きな声で、早く失敗する)で、require() は if (!require(pkg)) install.packages(pkg) のような条件チェックの中でのみ役に立ちます。