假设我需要在没有互联网连接的(Linux)机器上安装许多软件包.假设我下载了一份cr并将其刻录在我带到离线位置的DVD上:
wget ftp://cran.r-project.org/pub/R/src/contrib/*.tar.gz
Run Code Online (Sandbox Code Playgroud)
我甚至可以添加一个PACKAGES文件,其中包含所有源包及其依赖项的概述:
library(tools)
write_PACKAGES()
Run Code Online (Sandbox Code Playgroud)
我如何使用此脱机来安装源包,以便从本地文件中解析和安装依赖项?例如,有人想安装包ggplot2,它具有相当深的依赖结构.假设ggplot2的源包及其所有依赖项在当前工作目录中作为源包提供.如果我做:
install.packages("ggplot2_0.9.1.tar.gz", repos=NULL)
Run Code Online (Sandbox Code Playgroud)
这会导致错误,因为根本没有解决依赖关系.或者:
install.packages(list.files(pattern="*.tar.gz"), repos=NULL)
Run Code Online (Sandbox Code Playgroud)
但是,这也忽略了依赖结构,并尝试按字母顺序安装软件包,这也将失败.
我看着available.packages和contrib.url,但我不能找到一个本地文件安装一个源代码包,包括它的依赖的一个例子.
Jer*_*oen 46
Joshua Ulrich在对该问题的评论中给出了正确的答案:
关键是为参数添加前缀repos或者contriburl使用前缀file://.所以在Unixy系统中可以做到:
install.packages("ggplot2", contriburl="file:///path/to/packages/")
Run Code Online (Sandbox Code Playgroud)
这假定所有必需的源包以及PACKAGES索引文件都可用/path/to/packages.如果不存在PACKAGES文件,则应首先使用以下命令生成:
library(tools)
write_PACKAGES("/path/to/packages/")
Run Code Online (Sandbox Code Playgroud)
这将生成此目录中找到的所有源包的索引.请注意,在示例中,file:前缀后面有3个斜杠.第三个斜杠表示相对于文件系统根目录的路径.
repos和contriburl参数之间的区别在于repos将另一个附加/src/contrib到指定的路径,因为这通常是源包位于官方CRAN存储库镜像上的位置.