环顾四周,仍然不确定r中library()
/ require()
和source()
之间的区别是什么?根据这个SO问题:What is the difference between require() and library()?看来library()
和require()
是同一件事,也许是一个遗产。 source()
是否适合那些不想创建库的懒惰开发人员?什么时候使用这些构造?
答案 0 :(得分:4)
What is the difference between require() and library()?中已经很好地记录了library
和require
之间的区别。
因此,我将重点介绍source
与这些区别。实际上,它们在根本上是完全不同的命令。 library
和require
均未实际执行任何代码。它们只是以一种懒惰的方式简单地附加了一个名称空间,这意味着程序包中的各个函数只有在稍后被实际调用时才会运行。另一方面,Source所做的事情与之完全不同,那就是在那时执行文件中的所有代码。
一个小警告:软件包 可以使它们在装入或附加软件包时通过.onLoad
和{{1 }} 功能。在这里看看:https://stat.ethz.ch/R-manual/R-devel/library/base/html/ns-hooks.html
答案 1 :(得分:1)
source
在.R
文件中逐行运行代码。
library
和require
加载并附加R包。
source()
是否适合那些不想创建库的懒惰开发人员?
您正确地认为source
适用于没有包裹的情况。懒惰不是唯一的原因,有时软件包不适合使用-软件包提供功能,但不做。也许我有一个脚本,可以从数据库中提取数据,拟合模型并做出一些预测。一个软件包可以提供一些功能来帮助我做到这一点,但实际上并没有做到。保存在.R
文件中并与source()
一起运行的脚本可以运行命令并完成任务。
我想解决这个问题:
library()
和require()
似乎是同一回事,也许是一回事。
它们都做相同的事情(装入并附加包装)。主要区别在于,library()
会在程序包不可用时抛出错误并停止脚本,而require()
将根据其成功而返回TRUE
或FALSE
。普遍的共识是,library
更好,因此您的脚本会因出现明显的错误而停止,并且您可以在继续之前安装缺少的软件包。链接的问题有一个更详尽的讨论,在这里我不会尝试重复。