備忘ログ

チラシの裏的備忘録&メモ

Rのインストールしているパッケージを確認して名前を取り出す

小ネタ。

Rのインストールしているパッケージを確認する関数として、installed.packagesという関数がある。

新しいPC(環境)にRをインストールするとき、今使っているパッケージ名を取り出せればそのままインストールし直そうとするときに使えそうだが、インストールされているパッケージ名をそのまますべて取り出すだけではいまいち使いづらい。

使いづらい理由としては、どうやってインストールしたパッケージなのかわからないので、取り出されたパッケージ名をすべてinstall.packageに流し込んでもうまく行かないから。

Rの本体と一緒にインストールしたものまたは同梱されていて一緒にインストールしたもの(Priorityがbaseかrecommendになっているもの)、CARNからダウンロードしてインストールしたもの、Githubからremoteパッケージ等を使ってインストールしたもの、それ以外でインストールしたものがわからないと困る。

CARNからインストールした名前のリストがあればそれをそのままinstall.packageに流してやればよくなる(多分)。

とりあえず新しい環境に移行する前の取捨選択の材料になり得るし、Githubからインストールしたパッケージ名やどこから(ユーザー名とリポジトリ名)インストールかがわかると嬉しい。

この方法を忘れるというか、ほとんど使わないのでその都度数分かけて調べているのでメモしておく。

df <- installed.packages(fields = c("Repository", "GithubUsername", "GithubRepo"))

こうすると、installed.packagesで作られる行列に、リポジトリの列とGithubからインストールしたパッケージの場合はGithubUsernameとGithubRepoの列にそれぞれユーザー名とリポジトリ名に取り出すことができるようになる。

このままだと使いにくいのでデータフレーム化して取り扱いやすいようにして取り出す。

今回はそれぞれ取り出した条件のデータフレームを作ることにする。

library(dplyr)
## 
##  次のパッケージを付け加えます: 'dplyr'

##  以下のオブジェクトは 'package:stats' からマスクされています: 
## 
##      filter, lag

##  以下のオブジェクトは 'package:base' からマスクされています: 
## 
##      intersect, setdiff, setequal, union
# 後で使うのでstringrも読み込む
library(stringr)

# データフレーム化する
df <- df %>% 
  as_tibble()

# CARNからあとからインストールしたパッケージを取り出す
installed_CRAN <- df %>% 
  filter(!str_detect(License, "Part of R")) %>% 
  filter(is.na(Priority)) %>% 
  filter(Repository == "CRAN")

# Githubからインストールしたパッケージを取り出す
installed_Github <- df %>% 
  filter(!str_detect(License, "Part of R")) %>% 
  filter(is.na(Priority)) %>% 
  filter(!is.na(GithubUsername))

# Rと一緒にインストールしたパッケージを取り出す
installed_R <- df %>% 
  filter(str_detect(License, "Part of R") | !is.na(Priority))

# それ以外の方法で取り出したパッケージを取り出す
installed_NORA <- df %>% 
  filter(!str_detect(License, "Part of R")) %>% 
  filter(is.na(Priority)) %>% 
  filter(is.na(Repository)) %>% 
  filter(is.na(GithubUsername))

こうすると、例えばCRANからインストールしたパッケージの名前を取り出したいときは、

# 長いので実行しない
installed_CRAN$Package

とすると簡単に取り出せる。

また、Githubからインストールパッケージのリストからは簡単にGithubからインストールするときに必要な情報であるユーザー名とリポジトリ名を取り出すことができる。

installed_Github %>% 
  mutate(Github = str_c(GithubUsername, GithubRepo, sep = "/")) %>% 
  pull(Github)

CARNからダウンロードしてインストールしたパッケージの名前を”パッケージ名”, “パッケージ名”, …みたいな形式でほしいと思えば、

installed_CRAN %>% 
  pull(Package) %>% 
  str_c("\"", ., "\"", collapse = ", ") %>% 
  writeLines()

みたいな感じで作る事ができる。