【问题标题】:On-demand installation of packages [duplicate]按需安装软件包[重复]
【发布时间】:2013-11-19 05:34:03
【问题描述】:

有没有一种“标准”的方式来加载一个包,如果它还没有安装,就安装它?类似的东西

if (!is.installed(package))
    install(package)
library(package)

(伪代码!),封装在一个简洁的函数中?

我经常在擦除我的私人网站库后遇到困难,我不时这样做。如果我的脚本都使用这种“按需安装”工具,这将自动发生。

【问题讨论】:

  • 我使用您对is.installed <- function(mypkg) is.element(mypkg, installed.packages()[,1]) 的建议。当然,我设置了dependencies=TRUE
  • @Roland:那么,没有提供这个功能的包吗?

标签: r installation package


【解决方案1】:

我看到已经给出了其他答案,但我的偏好是:

 if ( !require('pkg') ) { install.packages('pkg', dependencies=TRUE);
                        require('pkg') }

如果您想抑制警告,请将quietly=TRUE 添加到第一个require 调用中。我想您可以将其捆绑到一个函数中,称为什么? insist?

 insist <- function(pkg){
          if ( !require(pkg, character.only=TRUE) ) { 
                    install.packages(as.character(pkg), dependencies=TRUE)
          require(pkg, character.only=TRUE) }
                         }

(我的主要绊脚石:require 的第一个参数似乎没有得到评估,除非character.only=TRUE。我读了几遍?require 页面来了解这个想法。我猜只是慢了。)

【讨论】:

    【解决方案2】:

    Dason K. 和我有 a package in the works on GitHub,需要一些测试和一些清洁,最终将被推送到 CRAN。包中的函数p_load 就是这样做的。

    library(devtools)
    install_github("trinker/pacman")
    

    【讨论】:

    • 谢谢!你为什么不回答链接的问题,现在这是一个官方的骗局?另外,pacmanpackratrbundler 相比如何?
    • bump 为什么不在这里重新发布它,它可能会受到更多关注:stackoverflow.com/questions/4090169/…
    • @krlmlr pacman 做的事情与 packrat 完全不同。前者通过更一致的命名和紧凑的代理函数来改进工作流程,而后者似乎更专注于保留特定环境,两者都对不同的目的有用。
    猜你喜欢
    • 2021-01-30
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2020-05-02
    • 2020-07-02
    相关资源
    最近更新 更多