仅下载程序包的源和所有依赖项

Pra*_*ani 29 packages r

我想知道是否有使用install.packages()或其他相关功能的方法来执行以下操作:tar.gz将指定包及其所有依赖项的源(即文件)下载到指定的文件夹(在Windows上).

这样做的一个原因是:假设我有一个未启用Internet访问的Linux帐户.为了在Linux机器上安装软件包,我首先要在我的Windows机器上下载所有需要的源代码,然后将它们ftp到Linux机器上,然后使用它们在Linux机器上安装

  install.packages('/home/me/R/Packages/blah.tar.gz', repos = NULL)
Run Code Online (Sandbox Code Playgroud)

seb*_*n-c 38

我最近有一个问题,我想下载所有依赖项,我已经解决了它:

说我想所有的依赖和进口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"))
Run Code Online (Sandbox Code Playgroud)

我现在可以将软件包下载到另一个目录.

download.packages(packages, destdir="whereyouactuallywantthefiles", 
                  type="source")
Run Code Online (Sandbox Code Playgroud)

如果您想在Linux PC上创建本地存储,请按照此处的说明进行操作.


Dir*_*tel 17

尝试download.packages(c("xts", "rms"), "c:/TEMP", .....)而不是install.packages(); 你可以在第二个参数中直接给它一个目标目录.

几年后编辑:如上所述,在其他答案和评论中,到目前为止,R的工具和工具包中已添加了几个辅助函数.[R 3.4.0将tools::CRAN_package_db()下载顶层PACKAGES.rds文件(当然,你可以只相结合download.file(),并readRDS()为太).

  • @PrasadChalasani检查`install.packages`的来源.有非导出函数`getDependencies`. (2认同)

Rei*_*son 14

现在在基础R附带的工具包中有更好的选择:package_dependencies().例如,请参阅@ sebastian-c的答案和最近的相关用例的问答.


getDependencies()utils包中有一个未导出的函数.我还没有研究它是如何工作的,但是将它与@Dirk的答案相结合应该可以让你在那里大部分时间.

基本上,它似乎你使用它像:

utils:::getDependencies(pkgs, dependencies, available, lib)
Run Code Online (Sandbox Code Playgroud)

pkgs要安装的包的字符向量在哪里,dependencies是您想要的依赖类型(Depends,Enhances等)的字符向量,available是来自的输出,available.packages()并且lib是评估依赖项的包的库位置.

如果你调试install.packages()它基本上是在实际开始安装任何东西之前执行getDependencies()@Dirk的download.packages()步骤.