为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉莫斯之舞 2019-08-06 13:29:15
优雅的方法来检查丢失的包并安装它们?这些天我似乎与共同作者分享了很多代码。他们中的许多人都是初级/中级R用户,并没有意识到他们必须安装他们尚未拥有的软件包。是否有一种优雅的方式来调用installed.packages(),将其与我正在加载的那些进行比较并在安装时如果丢失?
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

是。如果您有包列表,请将其与输出进行比较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)

除此以外:


如果您将代码放在一个包中并使它们成为依赖项,那么在安装包时它们将自动安装。


查看完整回答
反对 回复 2019-08-06
?
守着一只汪

TA贡献1872条经验 获得超3个赞

Dason K.和我有pacman包可以做得很好。p_load包中的功能就是这样做的。第一行是为了确保安装pacman。

if (!require("pacman")) install.packages("pacman")pacman::p_load(package1, package2, package_n)


查看完整回答
反对 回复 2019-08-06
?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

你可以使用以下的返回值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


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 566 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信