![](/img/trans.png)
[英]Possible to extract R packages installed from CRAN and Github, separately?
[英]Install only those R packages not already installed (inc. cran and github): any built-in way?
我正在寻找简化我的代码库,并有下面的解决方案来安装尚未安装的软件包,但我想我会通过询问是否有一些官方方法来仔细检查我没有重新发明轮子我不知何故错过了同样的事情。 谢谢!
#' 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(is.null(path)){
missing_pkgs = c(missing_pkgs,this_pkg)
}
}
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()
}
我不知道有任何基础 function 可以做你想做的事,所以你需要自己写。 对问题中的一个的一些评论:
帮助页面?installed.packages
说
不要使用它来确定是否安装了名为 package(使用 find.package 或 system.file)
因为如果您安装了很多软件包,它会很慢。
它也不会检测到可以更新 package 的情况; 在某些情况下,拥有旧版本的 package A 会阻止您安装 package B。
您的测试grep('github',missing_pkgs)
将对 CRAN 包githubinstall
和archivist.github
(以及任何未来在其名称中包含“github”的包)给出不好的结果。 你可能想测试别的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.