LoginSignup
2
2

More than 3 years have passed since last update.

GitHub上にあるRパッケージのオフラインインストール

Last updated at Posted at 2019-04-28

素人の備忘録。
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")

参考:R オフラインでのパッケージインストール

ところが、世の中にはGitHub上にあってCRANにはないパッケージも存在する。
例えば、aaaa/bbbbパッケージを、依存しているパッケージも含めてインストールしたい。
前提として、aaaa/bbbbパッケージが依存しているパッケージは、全てCRAN上にあるとする。

解決策

以下をオンラインPCで行い、ダウンロードしたパッケージ一式をオフラインPCのRにインストールする。

  1. aaaa/bbbbパッケージをオンラインPCのRにインストールし、bbbb.zipに圧縮
  2. aaaa/bbbbパッケージが直接依存しているCRAN上のパッケージを確認し、Windows用zipをダウンロード
  3. 直接依存しているパッケージが依存しているCRAN上のパッケージを確認し、Windows用zipをダウンロード
  4. 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上のパッケージがあったらどうしようかと考えたが、そのようなパッケージが見つからず検証できなかった。
その時に考えよう。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2