背景

在R语言中,载入R包函数有两个:library()require(),但是两者之间又存在很大的不同

区别

  1. 在初始环境下载入一个R包,如果这个包不存在,执行library()会提示Error,并且停止运行;执行require()会提示Warning,继续执行运算
  1. library("abc")
  2. Error in library("abc") : there is no package called 'abc'
  1. require("abc")
  1. ## Loading required package: abc
  1. ## Warning in library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
  2. ## there is no package called 'abc'
  1. 在载入的包不存在时,library()只停止运算,只会显示错误提示,没有返回值;require()会返回一个逻辑值
  1. test <- library("abc")
  2. Error in library("abc") : there is no package called 'abc
  3. test #显示错误提示
  4. Error: object 'test' not found
  1. test <- require("abc")
  1. ## Loading required package: abc
  1. ## Warning in library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
  2. ## there is no package called 'abc'
  1. test
  1. ## [1] FALSE

应用

在自定义函数中,可以利用require()函数来检测运行环境,确保函数可以正确运行

  1. if(require("MASS")){
  2. print("MASS is loaded correctly")
  3. } else {
  4. print("you need install MASS package")
  5. install.packages("MASS")
  6. if(require(MASS)){
  7. print("MASS installed and loaded")
  8. } else {
  9. stop("could not install MASS")
  10. }
  11. }