60

假设我需要在没有互联网连接的(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.packagescontrib.url但我找不到从本地文件安装源包的示例,包括它的依赖项。

4

3 回答 3

46

Joshua Ulrich 在对该问题的评论中给出了正确答案:

关键是将参数添加到reposor 或contriburlwith前面file://。所以在 Unixy 系统中可以这样做:

install.packages("ggplot2", contriburl="file:///path/to/packages/")

这假定所有必需的源包以及 PACKAGES 索引文件都在/path/to/packages. 如果不存在 PACKAGES 文件,则应首先使用以下方法生成:

library(tools)
write_PACKAGES("/path/to/packages/")

这将生成在此目录中找到的所有源包的索引。file:请注意,在示例中,前缀后面有 3 个斜杠。第三个斜杠表示相对于文件系统根目录的路径。

reposcontriburl参数之间的区别在于,repos它将附加另一个/src/contrib到指定的路径,因为这通常是源包位于官方 CRAN 存储库镜像的位置。

于 2012-05-31T21:35:54.883 回答
4

参考上面的答案,如果安装是在 Windows 中,那么 write_PACKAGES() 会在 '/path/to/packages/' 目录下生成两个文件:PACKAGES 和 PACKAGES.gz,所有 zip 文件都存放在该目录下。在 install.packages() 函数能够正确读取单独的 PACKAGES 文件之前,应删除文件 PACKAGES.gz ,否则会出现“无法打开压缩文件”错误。

于 2014-07-06T09:38:23.220 回答
0

我在离线安装时遇到了同样的问题。不知何故,它不能通过命令行工作。

我下载,提取所有依赖项(保持检查所需的最低版本)并将文件夹粘贴到库文件夹中。这样只有我的问题得到了解决。

于 2017-06-22T12:30:07.570 回答