tidyverse概論

ここでは、tidyverseはR上でデータサイエンスを円滑に行うためのパッケージ群、またそのパッケージのことを指します。次の図で示すように、tidyverseでは多種多様なデータ形式に対応したファイルの読み込みから、データ整形、可視化までを首尾一貫して行えるパッケージを提供されています。

tidyverseに含まれるパッケージとその役割

これらのパッケージの開発者はPosit社のメンバーが中心となっており、統一的な設計思想に基づいて開発が行われています。そのため、各パッケージ間での利用方法の差異が少なく、連携が容易な点もtidyverseを使う一つの利点となります。

tidyverseパッケージは次のコマンドを実行することでインストールされます。たくさんのパッケージをインストールするため、少し時間がかかるかもしれません。ですが、一度インストールしておくと、tidyverseに含まれるパッケージを個別にインストールする手間がなくなります。

install.packages("tidyverse")

インストールは済みましたか?

それでは、tidyverseパッケージ(そしてそれに含まれる各種パッケージ)を 利用可能にしましょう。

tidyverseの読み込み時になにが起こっているか

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.2     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.3     ✔ tibble    3.2.1
✔ lubridate 1.9.2     ✔ tidyr     1.3.0
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

library(tidyverse)を実行すると、コンソールにメッセージが表示されます。 メッセージは2つの内容を含んでいて、一つは利用可能となったパッケージについて、もう一つは関数名の衝突についての情報です。それぞれ詳しく見ていきましょう。

最初の出力では、tidyverseパッケージ本体のバージョン、またtidyverseによって読み込まれたtidyverseのコアパッケージとそのバージョンを出力しています。この資料を作成している段階では、tidyverseコアパッケージには次のものが含まれます(括弧内はバージョン)。

  • dplyr (1.1.2)
  • readr (2.1.4)
  • forcats (1.0.0)
  • stringr (1.5.0)
  • ggplot (3.4.3)
  • tibble (3.2.1)
  • lubridate (1.9.2)
  • tidyr (1.3.0)
  • purrr (1.0.2)

Conflictsと表示された2つめの出力は、tidyverseパッケージ群を読み込むことで発生した、関数名の競合状態を示すものです。関数名が競合するとはどういうことでしょう。

Rにはたくさんのパッケージがあり、各パッケージには関数が存在します。そのため、AとB、二つのパッケージで共通の名前をもつ関数(example()関数とします)が利用可能な状態となることがしばしばあります。この場合、Aパッケージのexample()関数を使いたいのに、Bパッケージのexample()関数が実行されてしまう可能性があります。

tidyverse群の中で、dplyrパッケージのfilter()関数およびlag()関数は、Rの標準パッケージのstatsの同一名の関数と競合します。同じ名前の関数が複数のパッケージで利用できる状態では、後から読み込まれたパッケージが優先されます。そのため、この出力はdplyrパッケージのfilter()関数とlag()関数が利用されることを示すものとなっています。

関数の衝突問題を解決するためのconflictedパッケージもtidyverseに含まれています。パッケージ間での関数の優先順位を変更するのに役立ちますので、興味のある方はウェブページをご覧ください。

ライフサイクル

Posit社のHadley Wickhamを中心に、関数へのライフサイクルの表示を推奨しています。関数の実用段階に応じてライフサイクルを設定し、どの関数が実験的なものなのか、どの関数が廃止予定なのかをユーザーにわかりやすく伝えることが目的です。関数の開発速度が速いtidyverseパッケージ群では、このライフサイクルへの注意が重要です。

ライフサイクルには次の段階があります。

  • experimental
  • stable(デフォルト)
  • superseded
  • deprecated

パッケージがどのライフサイクル段階にあるのかは、関数のドキュメントを参照するとわかります。