我想知道是否有一种方法可以使用install.packages()
或其他相关函数来执行以下操作:* 仅下载指定软件包的源代码 *(即tar.gz
文件)及其所有依赖项到指定文件夹(在Windows上)。
这样做的一个原因是:我说我有一个Linux帐户,它没有启用Internet访问。为了在Linux机器上安装软件包,我首先会在我的Windows机器上下载所有需要的源代码,然后将它们通过ftp传输到Linux机器上,并使用
install.packages('/home/me/R/Packages/blah.tar.gz', repos = NULL)
4条答案
按热度按时间zy1mlcev1#
我最近遇到了一个问题,我想下载所有依赖项,我已经解决了这个问题:
假设我想要
ggplot2
和MASS
的所有依赖项和导入:我现在可以将包下载到另一个目录。
从那里,如果你想在你的Linux PC上创建一个本地存储库,请按照here的说明操作。
8fq7wneg2#
请尝试
download.packages(c("xts", "rms"), "c:/TEMP", .....)
,而不是install.packages()
;你可以直接在第二个参数中给予它一个目标目录。tools::CRAN_package_db()
来下载顶级PACKAGES.rds
文件(当然,您也可以将download.file()
和readRDS()
组合起来)。5f0d552i3#
现在在base R附带的 tools 包中有更好的选项:
package_dependencies()
。例如,请参阅@sebastian-c的答案和此recent Q&A以获取相关用例。在utils包中有一个未导出的
getDependencies()
函数,我还没有研究过它是如何工作的,但是将它与@Dirk's Answer结合起来应该可以让你大部分的方法。不过,基本上你是这样使用它的:
其中
pkgs
是要安装的包的字符向量,dependencies
是您想要的依赖项类型(Depends,Enhances等)的字符向量,available
是available.packages()
的输出,lib
是评估依赖项的包的库位置。如果您调试
install.packages()
,它基本上是在实际开始安装任何东西之前执行getDependencies()
步骤,然后执行@Dirk的download.packages()
步骤。qlvxas9a4#
关于完整性:我需要创建一个文件夹“Raw_packages”,其中包括所有来自p.names的软件包(名称向量),它们的依赖关系,它们的依赖关系等。目的是使用此文件夹在未连接到Internet的PC上安装必要的软件包。此解决方案有助于:https://www.r-bloggers.com/2017/05/installing-packages-without-internet/。最重要的部分是在tools::package_dependencies()中使用recursive = TRUE。