Rのパッケージの利用について

Rのパッケージをどのようにインストールし、どうやって使うか。
R
Bioconductor
CRAN
GitHub
pkgdown
Published

August 31, 2024

Modified

September 17, 2024

これはRのパッケージについての簡単な解説です。 どうやってパッケージをインストールし、どうやって使うか。 また、パッケージの使用に際して注意すべき点を解説します。

パッケージとは

パッケージとは関数やデータなどを、再利用可能な形にしてまとめて、配布しているものである。 Rでは基本的に多くの外部パッケージをインストールして使うことが多い。 パッケージが公開されている場所はいくつかあり、以下に代表的な3つを挙げる。

  • CRAN (Website)
    • Rのパッケージを管理・配布している。ここから入手することが多い。
  • Bioconductor (Website)
    • 生命科学に関連したパッケージを管理している。
  • GitHub
    • CRANやBioconductorにない、開発版のパッケージが公開されている。
    • レビューなどはされていないので、自己責任のもとで使用する。

非常に多くのパッケージが開発されており、例えばCRANには21341 (2024-09-17 時点)のパッケージが登録されている。 それぞれの場所からパッケージをダウンロードしてインストールする方法は異なるので以下で説明する。

パッケージのインストール

CRAN

install.packages("パッケージ名")でインストールする。

install.packages("magrittr")

Bioconductor

Bioconductorのパッケージは専用のパッケージBiocManagerを使って管理する。 パッケージはBiocManger::install("パッケージ名")でインストールする。

# `BiocManager`パッケージをインストールしていない場合は、CRANからインストールする。
install.packages("BiocManager")

BiocManager::install("Biostrings")

GitHub

GitHubにあるパッケージは、remotesパッケージを使うことでインストールできる。

# `remotes`パッケージをインストールしていない場合は、CRANからインストールする。
install.packages("remotes")

# `remotes::install_github("GitHubユーザー名/リポジトリ名")`でインストールする。
remotes::install_github("t-arae/ngsmisc")

パッケージの利用

パッケージの読み込み

インストールできたパッケージは、library(パッケージ名)または、require(パッケージ名)で、 読み込むことができる。 library()関数などで読み込むと、読み込んだパッケージで定義されている関数やデータを使うことができるようになる。 ただし、次の項で述べる様な懸念点をきちんと考慮しておくとよい。

# パッケージの読み込み
library(stats)
require(stats)

library()と異なりrequire()は、パッケージがインストールされている場合TRUEを返す。 これを利用して、任意のパッケージがインストールされているかどうかの判定ができる。

# `require()`を使うと、パッケージをインストールしているかどうかの判定ができる。
package_names <- c("stats", "not_installed")
for(pname in package_names) {
    if(require(pname, character.only = TRUE, quietly = TRUE)) {
        st <- glue::glue({"package '{pname}' is installed and loaded."})
    } else {
        st <- glue::glue({"package '{pname}' is not installed."})
    }
    print(st)
}
package 'stats' is installed and loaded.
package 'not_installed' is not installed.

パッケージの関数呼び出しについて

Rのパッケージを読み込むと、すでに存在する同名の関数などを上書きすることがある(このことを衝突、コンフリクトという)。 例えば、dplyr::select()MASS::select()は、どちらもselect()という同じ名前を持つ関数であり、 両方のパッケージを呼び出すと後から呼び出したパッケージの関数に上書きされてエラーなどの原因となる恐れがある。

# `MASS`パッケージを読み込み、Ridge回帰結果の"ridgelm"クラスのオブジェクトについて`select`関数を使う
library(MASS)
names(longley)[1] <- "y"
model <- lm.ridge(y ~ ., longley)
select(model)
#> modified HKB estimator is 0.006836982 
#> modified L-W estimator is 0.05267247 
#> smallest value of GCV  at 0

# `dplyr`パッケージを読み込んで`MASS::select()`を上書きすると、先ほど実行できたコードがエラーになる
library(dplyr)
select(model)
#> Error in UseMethod("select"): no applicable method for 'select' applied to an object of class "ridgelm"

このような事態を避けるために、library()で呼び出すパッケージはなるべく少なくしておくとよいかもしれない。 library()で呼び出すことなくパッケージに定義された関数・データを使うには、 関数名の前にパッケージ名を指定することで直接呼び出すことができる(例 dplyr::select())。

ただし、パッケージ名を指定して呼び出すにはあまりにも煩雑な使い方となるパッケージについては、 library()でパッケージを読み込んで使ったほうがよい(例 magrittrggplot2など)。

各パッケージのWebサイトの見方について

パッケージを提供しているCRAN, Bioconductor, GitHub上の各パッケージのウェブサイトでは、 それぞれのパッケージについての説明がある。 どのくらい詳細に説明があるか、あるいはその説明のフォーマットはパッケージによりまちまちだが、 どこを見るべきかはある程度定まっている。 以下ではどこにどの様な情報があるかを簡単に解説したい。

近年開発されている多くのRパッケージでは、そのパッケージ自身のウェブサイトがある特定の形式で作られている。 これはRパッケージのウェブサイトを作るRパッケージであるpkgdownというパッケージで作られたウェブサイトである。 また、この形式のパッケージのウェブサイトについての見方も紹介したい。

CRAN

以下の画像はggh4xパッケージのCRAN上のウェブサイトのスクリーンショットである(2024-09-17時点)。

ウェブサイト上部にパッケージのタイトルと説明文があり、その下にさまざまな情報がリストアップされている。 いくつか大事そうな要素についてピックアップする。

  • URL
    • パッケージの別のウェブサイトが挙げられていることもある。
    • 以下であげるGitHubのWebページ(左)や、pkgdownで作成されたWebページへのリンク(右)は非常に有用
  • Materials
    • パッケージの補足的な情報を提供するリンク
    • ここでは、“README” と “NEWS”へのリンクが提供されており、それぞれ「パッケージの簡単な解説」と「パッケージのバージョン更新時の変更点」へのリンクとなっている。
  • Reference manual
    • 自動的に生成される、そのパッケージが提供する関数などのマニュアルのPDFファイル
    • help(パッケージの関数)で見ることができる情報と同じなので、あまり見ることはないかもしれない。
  • Vignettes
    • パッケージの利用方法の説明へのリンク

Bioconductor

以下の画像はplyrangesパッケージのBioconductor上のウェブサイトのスクリーンショットである(2024-09-17時点)。

CRANのウェブサイトと同じく、サイト上部にパッケージのタイトルと説明文があり、その下にさまざまな情報がリストアップされている。 いくつか大事そうな要素についてピックアップする。

  • Installation
    • インストールするために必要なコードが書かれている。
    • Rのコンソールにコピー&ペーストすることでパッケージをインストールできる。
  • Documentation
    • CRANのWebページにある、Materials, Vignettes, Reference manualなどと対応する情報がリストアップされている。

GitHub

以下の画像はggh4xパッケージのGitHub上のウェブサイトのスクリーンショットである(2024-09-17時点)。

ページ中心の四角く囲まれた領域(水色のフォルダのマークがある部分)は、 このリポジトリにあるファイルおよびフォルダを示している。 その下の四角く囲まれた領域にはこのリポジトリにあるREADME.mdというファイルの内容が表示されている。 ここでは、README.md

  • パッケージの説明
  • パッケージのインストール方法
  • パッケージ全体の概要
  • 簡単な使用例

などが書かれている。

また、ページの右のカラムの上の方には、pkgdownパッケージで生成したパッケージのウェブサイトへのリンクがある。 パッケージを利用していてどうしてもわからないエラーなどがある場合は、ページ上部の検索ボックスで検索をかけたり、 Issuesタブを開いて同じ様な問題に遭遇しているひとがいないか探すことができる。

pkgdownで生成されるパッケージのホームページ

以下の画像はpkgdownで生成された、ggh4xパッケージのウェブサイトとトップページのスクリーンショットである(2024-09-17時点)。

中心に表示されているのは、GitHubのウェブサイトでも表示されていたREADME.mdと同じ内容が表示されている。 ページ上部には “Get started”, “Reference”, “Articles”, “Changelog”タブがあり、 それぞれをクリックすることでその内容にジャンプすることができる。

“Articles”タブではVignettesの内容を見ることができる。

“Reference”タブではそのパッケージが提供している関数を一覧で見ることができ、 それぞれの関数のページに飛ぶことで、各関数の引数の詳細や実行例を見ることができる。

補足

パッケージ管理については、さらにいくつかの発展的な話題がある。 たとえばパッケージのバージョン管理や、それと関連してR自体のバージョン管理などである。 以下では簡単にどういったものがあるかだけ紹介したい。

パッケージを管理するその他のパッケージ

  • renv
    • 仮想環境の構築とバージョン管理
  • pak
    • パッケージインストールマネージャー
  • pacman
    • パッケージインストールマネージャー
    • 開発が止まっているかも(2024/8/30時点)
  • conflicted
    • 衝突の検出
  • import
    • 関数読み込みの別の選択肢
    • Pythonのimport文のようなことが実現できる

R自体の管理方法

  • Docker
    • コンテナベースの仮想環境を提供する
    • コンテナにインストールするRのバージョンを変えることで複数バージョンのR環境を実現できる
  • rig
    • Rust言語で書かれたコマンドラインツールで、複数バージョンのRをインストールして切り替えることができる。

参考

私たちのR - 5 Rパッケージ

R Not for Everyone: An Esoteric Guide

https://www.jaysong.net/RBook/packages.html

イマドキRのインストール事情? ~rig、pak、p3m~

https://zenn.dev/eitsupi/articles/rig-pak-p3m-2023

名前空間の衝突をconflictedパッケージで防ぐ - cucumber flesh

要約 パッケージを複数利用すると関数名等の衝突が発生し、意図しない振る舞いを取ることがある conflictedパッケージは、こうした衝突を防ぐための機能を提供する 多少の手間を惜しんでも、衝突の恐れのある関数については名前空間を指定することを勧める

https://uribo.hatenablog.com/entry/2018/09/29/103632

Sessioninfo

sessionInfo()
R version 4.3.2 (2023-10-31)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Ventura 13.1

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: Asia/Tokyo
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] crayon_1.5.2      vctrs_0.6.5       cli_3.6.3         knitr_1.48       
 [5] rlang_1.1.4       xfun_0.46         generics_0.1.3    jsonlite_1.8.8   
 [9] glue_1.7.0        htmltools_0.5.7   fansi_1.0.6       rmarkdown_2.25   
[13] evaluate_0.24.0   tibble_3.2.1      MASS_7.3-60       fastmap_1.1.1    
[17] yaml_2.3.9        lifecycle_1.0.4   compiler_4.3.2    dplyr_1.1.4      
[21] fs_1.6.3          timechange_0.3.0  htmlwidgets_1.6.4 pkgconfig_2.0.3  
[25] digest_0.6.34     R6_2.5.1          tidyselect_1.2.1  utf8_1.2.4       
[29] pillar_1.9.0      magrittr_2.0.3    withr_3.0.0       tools_4.3.2      
[33] lubridate_1.9.3