require()和library()之间有什么区别?
require()
和library()
之间有什么区别?
日常工作中没有太多。
但是,根据这两个函数的文档(通过在函数名称前面加一个?
并敲入回车来访问), require
在函数内部使用,因为它会输出警告,如果找不到包,则继续;而library
会抛出错误。
require()
另一个好处是它默认返回一个逻辑值。 如果包已加载则为TRUE
否则为FALSE
。
> test <- library("abc")
Error in library("abc") : there is no package called 'abc'
> test
Error: object 'test' not found
> test <- require("abc")
Loading required package: abc
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
there is no package called 'abc'
> test
[1] FALSE
所以你可以在下面的结构中使用require()
。 如果您想将代码分发到我们的R安装,那么主要方便的是可能未安装软件包。
if(require("lme4")){
print("lme4 is loaded correctly")
} else {
print("trying to install lme4")
install.packages("lme4")
if(require(lme4)){
print("lme4 installed and loaded")
} else {
stop("could not install lme4")
}
}
如果只有在必要时才需要安装软件包,则可以使用require()
,例如:
if (!require(package, character.only=T, quietly=T)) {
install.packages(package)
library(package, character.only=T)
}
对于可以使用的多个包
for (package in c('<package1>', '<package2>')) {
if (!require(package, character.only=T, quietly=T)) {
install.packages(package)
library(package, character.only=T)
}
}
专业提示:
在脚本内部使用时,可以通过指定install.packages()
的repos
参数来避免对话屏幕,例如
install.packages(package, repos="http://cran.us.r-project.org")
您可以将suppressPackageStartupMessages()
require()
和library()
包装在suppressPackageStartupMessages()
中,以便抑制包启动消息,并且还可以使用参数require(..., quietly=T, warn.conflicts=F)
来保持安装安静。
上一篇: What is the difference between require() and library()?