假设我需要在没有互联网连接的(Linux)机器上安装许多软件包。让我们说,我下载了一个cran的副本,并将其刻录到我带到离线位置的DVD上:
wget ftp://cran.r-project.org/pub/R/src/contrib/*.tar.gz
我甚至可以添加一个PACKAGES文件,其中包含所有源包及其依赖关系的概述:
library(tools) write_PACKAGES()
我如何使用这个离线安装源包以这样一种方式依赖解决和安装从本地文件?例如,有人想要安装软件包ggplot2,它有一个相当深的依赖结构。假定ggplot2的源包和它的所有依赖都可用作当前工作目录中的源包。如果我做:
install.packages("ggplot2_0.9.1.tar.gz",repos=NULL)
install.packages(list.files(pattern="*.tar.gz"),repos=NULL)
但是,这也忽略了依赖结构,并尝试按字母顺序安装包,这也将失败。
我调查了available.packages和contrib.url,但我只是找不到从本地文件包括它的依赖关系安装源包的例子。
正确的答案是由Joshua Ulrich在关于这个问题的评论中给出的:
原文链接:https://www.f2er.com/javaschema/282779.html关键是将参数添加到repos或contriburl前缀file://。因此在Unixy系统中可以做到:
install.packages("ggplot2",contriburl="file:///path/to/packages/")
这假定所有必需的源包以及PACKAGES索引文件在/ path / to / packages中可用。如果没有PACKAGES文件,则应首先使用:
library(tools) write_PACKAGES("/path/to/packages/")
这将生成在此目录中找到的所有源包的索引。请注意,在示例中,文件后面有3个斜杠:前缀。第三个斜杠表示相对于文件系统根目录的路径。
repos和contriburl参数之间的区别是,repos将附加另一个/ src / contrib到指定的路径,因为这通常是源包位于官方CRAN库镜像上。