require()和library()有什么区别?
 require()和library()什么区别? 
日常工作中没有太多。
 但是,根据这两个函数的文档(通过在函数名称前面加一个?并按回车来访问),在函数内部使用require ,因为它会输出一个警告,如果没有find包,则继续;而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)安静。
除了已经给出的好build议之外,我还要补充一点:
 最好避免使用require() 除非实际上会使用它返回的值,例如在一些错误检查循环中,比如thierry给出的。 
 在大多数情况下,最好使用library() ,因为如果程序包不可用,这将在程序包加载时给出错误消息。 如果包不在那里, require()将会失败而不会出现错误。 这是找出是否需要安装软件包的最佳时机(或者甚至因为拼写错误而不存在)。 及早获得错误反馈,并在相关时间避免可能的头痛,以便跟踪为什么后面的代码尝试使用库例程时失败 
 ?library 
你会看到:
library(package)和require(package)都加载包名称package并把它放在search列表中。require被devise用于其他function内部; 它返回FALSE并给出一个警告(而不是像library()默认那样的错误),如果包不存在的话。 这两个函数检查并更新当前加载的包列表,不重新加载已加载的包。 (如果要重新加载这样的包,请首先调用detach(unload = TRUE)或unloadNamespace。)如果要加载包而不将其放在search列表中,请使用requireNamespace。
 我最初的理论不同之处在于, library加载的软件包是否已经加载,也就是说,它可能会重新加载一个已经加载的软件包,而只require检查它是否被加载,或者加载它,如果不是的话在依赖于某个包的函数中)。 但是,文档驳斥了这一点,并明确指出这两个函数都不会重载一个已经加载的包。 
这似乎是已经加载的包上的差异。 虽然确实需求和库不加载包。 图书馆在检查和退出之前做了很多其他的事情。
我build议从运行2mil时间的函数的开头去除“require”,但是如果出于某种原因,我需要保留它。 要求在技术上是一个更快的检查。
 microbenchmark(req = require(microbenchmark), lib = library(microbenchmark),times = 100000) Unit: microseconds expr min lq mean median uq max neval req 3.676 5.181 6.596968 5.655 6.177 9456.006 1e+05 lib 17.192 19.887 27.302907 20.852 22.490 255665.881 1e+05 
  require()加载所有附加的包