假设我需要在没有互联网连接的(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.packages
和contrib.url
,但我找不到从本地文件安装源包的示例,包括它的依赖项。
答案 0 :(得分:45)
Joshua Ulrich在对该问题的评论中给出了正确的答案:
关键是将参数添加到repos
或contriburl
前加file://
。所以在Unixy系统中可以做到:
install.packages("ggplot2", contriburl="file:///path/to/packages/")
这假定/path/to/packages
中提供了所有必需的源包以及PACKAGES索引文件。如果不存在PACKAGES文件,则应首先使用以下命令生成:
library(tools)
write_PACKAGES("/path/to/packages/")
将生成此目录中找到的所有源包的索引。请注意,在示例中,file:
前缀后面有3个斜杠。第三个斜杠表示相对于文件系统根目录的路径。
repos
和contriburl
参数之间的区别在于repos
会将另一个/src/contrib
附加到指定的路径,因为这通常是源包位于官方CRAN存储库镜像。
答案 1 :(得分:4)
参考上面的答案,如果安装在Windows中,则write_PACKAGES()会在'/ path / to / packages /'目录下生成两个文件:PACKAGES和PACKAGES.gz,其中放置所有zip文件。在install.packages()函数正确读取单独的PACKAGES文件之前,应删除文件PACKAGES.gz,否则会出现“无法打开压缩文件”错误。
答案 2 :(得分:0)
我在离线安装期间遇到了同样的问题。不知怎的,它没有通过命令行工作。
我下载了,解压缩了所有依赖项(保持检查所需的最小版本)并将文件夹粘贴到库文件夹中。这样只有我的问题得到了解决。