如何在R中强制将包及其依赖安装到用户库(忽略系统库已有)
强制将R包及其依赖安装到用户库的方法
当然有办法解决这个问题!当系统库中已存在依赖包,但你需要把所有相关包(包括依赖)都安装到用户库时,可以试试以下两种实用方法:
方法1:临时修改库路径(推荐)
通过临时将用户库设置为R唯一识别的库路径,R会认为系统库中的依赖包不存在,从而自动将所有依赖安装到用户库中。可以用withr包的with_libpaths()函数来实现(如果没装withr,先装一下):
# 先安装withr(如果还没装) install.packages("withr", lib = .libPaths()[1]) # 临时切换到用户库,安装viridis及其所有依赖 withr::with_libpaths( new = .libPaths()[1], # .libPaths()[1]默认就是你的用户库路径 install.packages("viridis", dependencies = TRUE) )
这个方法的好处是不会永久改变你的库路径设置,只是在安装这个包的过程中生效,非常安全。
方法2:直接指定安装参数
如果你不想用额外的包,可以直接在install.packages()里通过INSTALL_opts参数强制将依赖安装到用户库,同时用--force强制重新安装(哪怕依赖已存在于系统库):
# 自动获取你的用户库路径 user_lib <- .libPaths()[1] install.packages( "viridis", lib = user_lib, dependencies = TRUE, INSTALL_opts = c(paste0("--library=", user_lib), "--force") )
这里的--library参数告诉R把所有依赖都安装到指定的用户库,--force则强制覆盖(或重新安装)已存在的包,不管它们在系统库中有没有。
额外提示
- 你可以用
.libPaths()查看当前的库路径顺序,第一个位置就是默认的用户库。 - 如果之后想优先加载用户库中的包,确保
.libPaths()里用户库在系统库前面(默认就是这样),这样R会先从用户库查找包。
内容的提问来源于stack exchange,提问作者Απόστολος Μαλατράς
相关产品推荐
相关产品推荐

