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

时间:2011-06-08 15:27:23

标签: r packages

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

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

将它们安装在Linux机器上。
  install.packages('/home/me/R/Packages/blah.tar.gz', repos = NULL)

3 个答案:

答案 0 :(得分: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"))

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

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

如果您想在Linux PC上创建本地仓库,请按照here的说明进行操作。

答案 1 :(得分:17)

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

几年之后

编辑:如上所述其他答案和评论,到目前为止,R的工具和工具包中已添加了几个辅助函数。 R 3.4.0将tools::CRAN_package_db()下载顶级PACKAGES.rds文件(当然,您也可以将download.file()readRDS()合并到一起。

答案 2 :(得分:14)

现在,基础R附带的 tools 包中有更好的选项:package_dependencies()。例如,参见@ sebastian-c的答案和相关用例的recent Q&A


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

但基本上,您似乎使用它:

utils:::getDependencies(pkgs, dependencies, available, lib)

其中pkgs是要安装的包的字符向量,dependencies是您想要的依赖类型(Depends,Enhances等)的字符向量,available是来自的输出available.packages()lib是评估依赖关系的包的库位置。

如果你调试install.packages()它基本上是getDependencies()步骤,然后是@Dirk的download.packages()步骤,然后才开始安装任何东西。