Rのパッケージの管理に関するあれこれ
Rには様々なパッケージが提供されており、無しでは仕事ができない人も多いと思いますが、リポジトリーから自動的にインストールしてロードする以外のことも知っておくと便利です。
1 インストール
パッケージは、インターネット上のパッケージ・リポジトリーCRANから、自動でダウンロードしてきて、自動でインストールするinstall.packages
を使うのが一般的です。png
パッケージをインストールしてみましょう。
install.packages("png", repos = "https://ftp.yz.yamagata-u.ac.jp/pub/cran/")
repos
はCRANの場所を指定するオプションで、ここでは日本のミラーサイトを指定しています。指定せず、options
での設定もないと、選択することになります。options
で指定する場合は、以下のようにします。
options(repos = "https://ftp.yz.yamagata-u.ac.jp/pub/cran/")
Rtoolsをインストールしてある場合、type = "source"
をつけることで、ソースコードをダウンロードしてきて、コンパイルしてからインストールさせることもできます。
1.1 ダウンロード
パッケージはダウンロードだけすることもできます。
<- download.packages("png", Sys.getenv("TEMP"))) (r_dp
上の例では一時フォルダーにダウンロードしています。なお、戻り値の行列の2列目にファイルパスが入っています。
1.2 ローカルからインストール
ファイルパスを指定して、インストールすることもできます。ダウンロードしたpngパッケージをインストールしてみましょう。ファイル名がバージョンごとに変わることに注意してください。
install.packages(file.path(Sys.getenv("TEMP"), "png_0.1-8.tar.gz"), repos = NULL, dependencies = TRUE)
2 インストールの確認
パッケージ名とインストール先とタイトルの一覧を確認できます。
with(library(quietly=TRUE, verbose=FALSE), {
"Package"]=="png", ]
results[results[, })
2.1 インストールを促す
「~という名前のパッケージはありません」と言うエラーメッセージが混乱を招きそうな場合、別のメッセージを用意することもできます。
<- function(pkgs){
loadpkg <- library(quietly=TRUE, verbose=FALSE)$results[,"Package"]
pkgnames for(pkg in pkgs){
if(!any(suppressWarnings(pkgnames == pkg))){
stop(sprintf("Do install.packages(\"%s\") before runnning this script.", pkg))
}library(pkg, character.only = TRUE)
}
}
loadpkg("png")
3 取扱説明書
Rのパッケージにはビネットと呼ばれる取扱説明書を添付する仕組みがあります。
ビネットが無い場合も多いですし、あっても簡単な利用例から推定方法の理論的説明まで内容は様々なのですが、分からないことがあったら眺めてみることをお勧めします。
pngパッケージにはビネットはないので、ggplot2のビネットを見る例を示します。
# ggplot2の中のビネットの一覧を表示する
vignette(package = "ggplot2")
# 一覧にあったggplot2-specsを表示する
vignette("ggplot2-specs", "ggplot2")
# ブラウザーでビネットを見る
browseVignettes("ggplot2")
4 ロード
パッケージ名を指定してロードします。ダブルコーテーションは要りません。
library(png)
変数でパッケージ名を指定したい場合(もしくはダブルコーテーションをつけたい場合)は、character.only = TRUE
をつけてください。
5 アンロード
ロードしたパッケージを消すときは、以下のようにします。
detach("package:png", unload="TRUE")
引数はパッケージ名にpackage:
のプリフィックスがついているだけですが、search()
で確認できます。
6 アップデート
再インストールしてもよいのですが、update.packages
で一括アップデートできます。library
でロードしている場合はアップデートに失敗するので、Rの起動直後に行うのが無難です。
update.packages(ask = FALSE)
7 削除
インストール先のフォルダーを消せばよいです。間違えると惨劇になるので、OSから消した方が無難でしょう。それでもRから行う場合は、以下のようにします。
unlink(with(library(quietly=TRUE, verbose=FALSE), {
<- results[results[, "Package"]=="png", ]
r file.path(r["LibPath"], r["Package"])
recursive = TRUE) }),