web-dev-qa-db-ja.com

パッケージのソースとすべての依存関係のみをダウンロードする

install.packages()または他の関連関数を使用して次のことを行う方法があるかどうか疑問に思っています:ソースのみをダウンロード(つまり、tar.gzファイル)指定されたパッケージとそのすべての依存関係を指定されたフォルダーに(Windowsの場合)。

これを行う理由の1つは、インターネットアクセスが有効になっていないLinuxアカウントを持っていると言うことです。 Linuxマシンにパッケージをインストールするには、最初に必要なすべてのソースをWindowsマシンにダウンロードしてから、それらをLinuxマシンにFTPで転送し、を使用してLinuxマシンにインストールします。

  install.packages('/home/me/R/Packages/blah.tar.gz', repos = NULL)
29

ベースRに付属するtoolsパッケージには、これに対するより良いオプションがあります:package_dependencies()。たとえば、関連するユースケースについては、@ sebastian-cからの回答とこれ 最近のQ&A を参照してください。


UtilsパッケージにはエクスポートされていないgetDependencies()関数があります。私はそれがどのように機能するかを研究していませんが、それを@ Dirk's Answerと組み合わせると、ほとんどの方法でそこに到達するはずです。

基本的には、次のように使用しているようです。

_utils:::getDependencies(pkgs, dependencies, available, lib)
_

ここで、pkgsはインストールするパッケージの文字ベクトル、dependenciesは必要な依存関係のタイプ(依存関係、拡張機能など)の文字ベクトル、availableはからの出力です。 available.packages()およびlibは、依存関係が評価されるパッケージのライブラリの場所です。

install.packages()をデバッグする場合、基本的にはgetDependencies()ステップを実行し、実際に何かのインストールを開始する前に@Dirkのdownload.packages()ステップを実行します。

14
Gavin Simpson

最近、すべての依存関係をダウンロードしたいという問題が発生し、次のように解決しました。

ggplot2MASSのすべての依存関係とインポートが必要だとします。

getPackages <- function(packs){
  packages <- unlist(
    tools::package_dependencies(packs, available.packages(),
                         which=c("Depends", "Imports"), recursive=TRUE)
  )
  packages <- union(packs, packages)
  packages
}

packages <- getPackages(c("ggplot2", "MASS"))

これで、パッケージを別のディレクトリにダウンロードできます。

download.packages(packages, destdir="whereyouactuallywantthefiles", 
                  type="source")

Linux PCでローカルリポジトリを作成する場合は、そこから指示に従ってください ここ

38
sebastian-c

download.packages(c("xts", "rms"), "c:/TEMP", .....)の代わりにinstall.packages()を試してください。 2番目の引数でターゲットディレクトリを直接指定できます。

数年後に編集:他の回答やコメントで述べたように、今ではいくつかのヘルパー関数がRのツールとutilsパッケージに追加されています。 R 3.4.0には、トップレベルの_PACKAGES.rds_ファイルをダウンロードするためのtools::CRAN_package_db()があります(もちろん、そのためにdownload.file()readRDS()を組み合わせることができます。あまりにも)。

17