优雅的方式来检查丢失的包并安装它们?

我似乎近期与共同作者分享了很多代码。 他们中的许多人都是新手/中级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而做。

链接地址: http://www.djcxy.com/p/25017.html

上一篇: Elegant way to check for missing packages and install them?

下一篇: How to view hierarchical package structure in Eclipse package explorer