R中require()和library()的区别
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 中执行其他常见任务: