优雅的方式来检查丢失的包并安装它们?
我似乎近期与共同作者分享了很多代码。 他们中的许多人都是新手/中级R用户,并没有意识到他们必须安装他们尚未拥有的软件包。
  有没有一种优雅的方式来调用installed.packages() ,比较那些我加载和安装,如果失踪? 
  是。  如果您有软件包列表,请将其与installed.packages()[,"Package"]的输出进行比较,然后安装缺失的软件包。  像这样的东西: 
list.of.packages <- c("ggplot2", "Rcpp")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
除此以外:
如果你把你的代码放在一个包中,并使它们依赖,那么当你安装你的包时,它们将自动被安装。
  Dason K.和我有可以很好地做到这一点的pacman软件包。  包中的函数p_load执行此操作。  第一行是确保安装pacman。 
if (!require("pacman")) install.packages("pacman")
pacman::p_load(package1, package2, package_n)
  你可以使用require的返回值: 
if(!require(somepackage)){
    install.packages("somepackage")
    library(somepackage)
}
  我在安装之后使用了library ,因为如果安装不成功或者出于其他原因无法加载软件包,它将引发异常。  您可以使其更健壮并且可重复使用: 
dynamic_require <- function(package){
  if(eval(parse(text=paste("require(",package,")")))) return True
  install.packages(package)
  return eval(parse(text=paste("require(",package,")")))
}
  这种方法的缺点是你必须将包名称用引号引起来,你不会为真正的require而做。 
上一篇: Elegant way to check for missing packages and install them?
下一篇: How to view hierarchical package structure in Eclipse package explorer
