【发布时间】:2021-04-04 01:13:20
【问题描述】:
我希望简化我的代码库,并使用下面的解决方案来安装尚未安装的软件包,但我想我会通过询问是否有一些官方方法来仔细检查我没有重新发明轮子做同样的事情,我不知何故错过了。谢谢!
#' Installs any packages not already installed
#' @examples
#' \dontrun{
#' install_if_missing(c('tidyverse','github.com/stan-dev/cmdstanr'))
#' }
install_if_missing = function(pkgs){
missing_pkgs = NULL
for(this_pkg in pkgs){
path = NULL
try(
path <- find.package(basename(this_pkg),quiet=T,verbose=F)
, silent = T
)
if(length(path)==0){
missing_pkgs = c(missing_pkgs,this_pkg)
}else{
message('Found ',this_pkg,' @ "',path,'"')
}
}
cran_missing = missing_pkgs[!grepl('github.com/',fixed=T,missing_pkgs)]
if(length(cran_missing)>0){
message('The following required but uninstalled CRAN packages will now be installed:\n',paste(cran_missing,collapse='\n'))
install.packages(cran_missing)
}
github_missing = missing_pkgs[grepl('github.com/',fixed=T,missing_pkgs)]
github_missing = gsub('github.com/','',github_missing)
if(length(github_missing)>0){
message('The following required but uninstalled Github packages will now be installed:\n',paste(this_pkg,collapse='\n'))
remotes::install_github(github_missing)
}
invisible()
}
【问题讨论】:
标签: r installation package