素人の備忘録。
Windowsでのみ確認。
動機
オフラインのPCにRのパッケージを、依存しているパッケージも含めてインストールしたい。
CRAN上にあるパッケージであれば、miniCRAN
パッケージを使う方法が知られている。
miniCRAN.r
# 必要パッケージの読込
library(miniCRAN)
# ワーキングディレクトリの設定
setwd("C:/Users/hoge/Downloads/R")
# 調べたいパッケージ一覧
pkgname <- c(
"xxxx",
"yyyy",
"zzzz"
)
# 使用したいパッケージに紐付いているパッケージの探索
pkgs <- pkgDep(pkgname)
# ワーキングディレクトリ直下のpkgsフォルダにパッケージダウンロード
download.packages(pkgs, destdir = "pkgs", type = "win.binary")
ところが、世の中にはGitHub上にあってCRANにはないパッケージも存在する。
例えば、aaaa/bbbb
パッケージを、依存しているパッケージも含めてインストールしたい。
前提として、aaaa/bbbb
パッケージが依存しているパッケージは、全てCRAN上にあるとする。
解決策
以下をオンラインPCで行い、ダウンロードしたパッケージ一式をオフラインPCのRにインストールする。
-
aaaa/bbbb
パッケージをオンラインPCのRにインストールし、bbbb.zip
に圧縮 -
aaaa/bbbb
パッケージが直接依存しているCRAN上のパッケージを確認し、Windows用zipをダウンロード - 直接依存しているパッケージが依存しているCRAN上のパッケージを確認し、Windows用zipをダウンロード
- 1~3のzipファイルをオフラインPCへ
1~3部分は以下のとおり行った。
miniCRAN_GitHub.r
# 必要パッケージの読込
library(miniCRAN)
library(devtools)
library(tools)
# ダウンロード先の設定
dow <- "C:/Users/hoge/Downloads/R/"
# サブディレクトリ名
subd <- "pkgs/"
# インストールするリポジトリ名
repo <- "aaaa/bbbb"
# /以降がパッケージ名
pkgname <- substr(repo, regexpr("/", repo) + 1, nchar(repo))
# Githubからインストール
install_github(repo)
# インストールされたパッケージをzipに圧縮してサブディレクトリに置く
setwd(.libPaths())
zip(paste0(dow, subd, pkgname, ".zip"), pkgname)
# 依存しているパッケージの探索
## CRANパッケージ一覧にリポジトリを追加
pdb <- addPackageListingGithub(pdb = available.packages(), repo)
## 直接的な依存パッケージを確認
base_pkgs <- package_dependencies(packages = pkgname, pdb, which = "Depends")[[1]]
## 直接的な依存パッケージが依存しているパッケージを確認
pkgs <- pkgDep(base_pkgs)
# ダウンロード先をワーキングディレクトリとして設定
setwd(dow)
# ワーキングディレクトリ直下のサブディレクトリに依存パッケージをダウンロード
download.packages(pkgs, destdir = subd, type = "win.binary")
補足
GitHub上のパッケージに依存しているGitHub上のパッケージがあったらどうしようかと考えたが、そのようなパッケージが見つからず検証できなかった。
その時に考えよう。