优雅的方式来检查丢失的包并安装它们?
我似乎近期与共同作者分享了很多代码。 他们中的许多人都是新手/中级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