有没有一种“标准”的方式来加载一个包,如果它还没有安装,就安装它?就像是
if (!is.installed(package))
install(package)
library(package)
(伪代码!),封装在一个简洁的函数中?
擦拭我的私人网站库后,我通常会遇到困难,我时不时会这样做。如果我的脚本都使用这种“按需安装”工具,这将自动发生。
有没有一种“标准”的方式来加载一个包,如果它还没有安装,就安装它?就像是
if (!is.installed(package))
install(package)
library(package)
(伪代码!),封装在一个简洁的函数中?
擦拭我的私人网站库后,我通常会遇到困难,我时不时会这样做。如果我的脚本都使用这种“按需安装”工具,这将自动发生。
Dason K. 和我在 GitHub 上有一个正在开发的包,需要一些测试和一些清理,最终将被推送到 CRAN。包中的函数p_load
就是这样做的。
library(devtools)
install_github("trinker/pacman")
我看到已经给出了其他答案,但我的偏好是:
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
页页面才得到这个想法。我猜只是慢了。)