离线安装R包tidyverse时install.packages提示依赖包找不到是什么原因?
离线安装tidyverse无法识别本地依赖的原因及解决方法
核心原因
- 当你给
install.packages设置repos = NULL时,R不会主动扫描本地工作目录查找未在pkgs参数中明确列出的依赖包,哪怕依赖的压缩包确实存在于当前目录,也会被判定为缺失。 - 若
pkgs参数中包的排序错误,将tidyverse放在依赖包之前,安装程序会先尝试安装tidyverse,此时它的依赖还未完成安装,就会抛出依赖缺失错误。 - 包文件命名不符合R的规范要求:R要求源码包的命名格式为
[包名]_[版本号].tar.gz,如果你的文件命名是类似broom_tar.gz这种错误格式,R无法从文件名中解析出正确的包名,就会识别不到已存在的包。 - 依赖包版本不匹配:你下载的依赖包版本不符合当前tidyverse版本的要求范围,R会判定依赖未满足。
解决方法
- 首先在当前包存放目录生成本地源索引,执行以下命令:
tools::write_PACKAGES(".", type = "source")
- 更换安装命令,指定本地源路径即可自动识别所有本地依赖完成安装:
install.packages( pkgs = "tidyverse", dependencies = c("Depends", "Imports", "Suggests"), repos = NULL, contriburl = paste0("file://", getwd()) )
如果不想生成索引,也可以手动将所有依赖包按从底层到上层的依赖顺序排列在pkgs向量的最前面,最后再放tidyverse,按顺序安装即可。
另外请确认你下载的所有包都适配R 3.6版本,避免因版本兼容性问题导致安装失败。
内容的提问来源于stack exchange,提问作者Mr. Longshot
相关产品推荐
相关产品推荐

