我想知道是否有办法使用install.packages()
或其他相关功能来执行以下操作:仅下载指定包的源(即tar.gz
文件)以及它们在指定文件夹中的所有依赖关系(在Windows上)。
这样做的一个原因是:假设我有一个未启用互联网访问的Linux帐户。为了在Linux机器上安装软件包,我首先在我的Windows机器上下载所有需要的源,然后将它们ftp到Linux机器上,然后使用
将它们安装在Linux机器上。 install.packages('/home/me/R/Packages/blah.tar.gz', repos = NULL)
答案 0 :(得分:38)
我最近遇到了一个问题,我想下载所有依赖项,因此我已经解决了这个问题:
说我想要ggplot2
和MASS
的所有依赖关系和导入:
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()
步骤,然后才开始安装任何东西。