脱机安装R包和依赖项

时间:2012-05-29 22:47:33

标签: r cran

假设我需要在没有互联网连接的(Linux)机器上安装许多软件包。假设我下载了一份cr并将其刻录在我带到离线位置的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,但我找不到从本地文件安装源包的示例,包括它的依赖项。

3 个答案:

答案 0 :(得分:45)

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

关键是将参数添加到reposcontriburl前加file://。所以在Unixy系统中可以做到:

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

这假定/path/to/packages中提供了所有必需的源包以及PACKAGES索引文件。如果不存在PACKAGES文件,则应首先使用以下命令生成:

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:0)

我在离线安装期间遇到了同样的问题。不知怎的,它没有通过命令行工作。

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