require()和library()函数都可以用来在R 中加载包,但它们有一个细微的区别:
如果未安装软件包, require()会显示警告,然后继续执行代码。
Library()将抛出错误并停止代码执行。
由于这种差异,通常仅在将包加载到函数中时才使用require() ,以便即使包不存在该函数也能继续运行。
在实践中,大多数程序员建议使用library() ,因为您将希望收到一条错误消息,通知您未安装软件包。
这是您在编写代码时应该尽早意识到的事情。
下面的例子说明了require()和library()函数在实践中的区别。
例子:R中require()和library()的区别
假设我们要从mlbench包加载BostonHousing数据集,但假设尚未安装mlbench包。
以下代码演示了如何使用library()函数尝试加载此包并对BostonHousing数据集进行数据分析:
#attempt to load mlbench library
library (mlbench)
Error in library(mlbench): there is no package called 'mlbench'
#load Boston Housing dataset
data(BostonHousing)
#view summary of Boston Housing dataset
summary(BostonHousing)
#view total number of rows in Boston Housing dataset
nrow(BostonHousing)
由于mlbench包尚未安装,因此当我们使用library()函数时会收到错误,并且其余代码甚至没有执行。
这很有用,因为它立即让我们知道该软件包尚未安装,并且我们需要在继续之前安装它。
但是,假设我们使用require()来加载mlbench包:
#attempt to load mlbench library
require (mlbench)
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
there is no package called 'mlbench'
#load Boston Housing dataset
data(BostonHousing)
Warning message:
In data(BostonHousing) : data set 'BostonHousing' not found
#view summary of Boston Housing dataset
summary(BostonHousing)
Error in summary(BostonHousing): object 'BostonHousing' not found
#view total number of rows in Boston Housing dataset
nrow(BostonHousing)
在此示例中,直到我们尝试使用summary()函数来汇总BostonHousing数据集时,我们才会收到错误消息。
相反,我们在使用require()函数后收到警告,其余代码继续执行,直到遇到错误。
此示例说明了 R 中library()和require()之间的区别: library()函数立即产生错误,并且不会执行其余代码,因为mlbench未加载。
这就是为什么在大多数情况下您在加载包时需要使用library()函数。
奖励:检查是否安装了特定的软件包
我们可以使用system.file()函数来检查当前的 R 环境中是否安装了特定的软件包。
例如,我们可以使用以下语法来检查当前R环境中是否安装了ggplot2包:
#check if ggplot2 is installed
system. file (package=' ggplot2 ')
[1] "C:/Users/bob/Documents/R/win-library/4.0/ggplot2"
由于安装了 ggplot2,该函数仅返回安装包的文件路径。
现在假设我们检查mlbench软件包是否已安装:
#check if mlbench is installed
system. file (package=' mlbench ')
[1] ""
该函数返回一个空字符串,这告诉我们当前环境中尚未安装mlbench软件包。
其他资源
以下教程解释了如何在 R 中执行其他常见任务:
如何在 R 中加载多个包如何清除R中的环境如何清除 RStudio 中的所有绘图