0

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

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

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

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

4

2 回答 2

2

Dason K. 和我在 GitHub 上有一个正在开发的包,需要一些测试和一些清理,最终将被推送到 CRAN。包中的函数p_load就是这样做的。

library(devtools)
install_github("trinker/pacman")
于 2013-11-07T18:57:14.800 回答
0

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

 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页页面才得到这个想法。我猜只是慢了。)

于 2013-11-07T18:10:08.163 回答