r中的library()/ require()和source()之间有什么区别?

时间:2019-03-12 13:21:22

标签: r

环顾四周,仍然不确定r中library() / require()source()之间的区别是什么?根据这个SO问题:What is the difference between require() and library()?看来library()require()是同一件事,也许是一个遗产。 source()是否适合那些不想创建库的懒惰开发人员?什么时候使用这些构造?

2 个答案:

答案 0 :(得分:4)

What is the difference between require() and library()?中已经很好地记录了libraryrequire之间的区别。

因此,我将重点介绍source与这些区别。实际上,它们在根本上是完全不同的命令。 libraryrequire均未实际执行任何代码。它们只是以一种懒惰的方式简单地附加了一个名称空间,这意味着程序包中的各个函数只有在稍后被实际调用时才会运行。另一方面,Source所做的事情与之完全不同,那就是在那时执行文件中的所有代码。

一个小警告:软件包 可以使它们在装入或附加软件包时通过.onLoad和{{1 }} 功能。在这里看看:https://stat.ethz.ch/R-manual/R-devel/library/base/html/ns-hooks.html

答案 1 :(得分:1)

source.R文件中逐行运行代码。

libraryrequire加载并附加R包。

  

source()是否适合那些不想创建库的懒惰开发人员?

您正确地认为source适用于没有包裹的情况。懒惰不是唯一的原因,有时软件包不适合使用-软件包提供功能,但不。也许我有一个脚本,可以从数据库中提取数据,拟合模型并做出一些预测。一个软件包可以提供一些功能来帮助我做到这一点,但实际上并没有做到。保存在.R文件中并与source()一起运行的脚本可以运行命令并完成任务。


我想解决这个问题:

  

library()require()似乎是同一回事,也许是一回事。

它们都做相同的事情(装入并附加包装)。主要区别在于,library()会在程序包不可用时抛出错误并停止脚本,而require()将根据其成功而返回TRUEFALSE。普遍的共识是,library更好,因此您的脚本会因出现明显的错误而停止,并且您可以在继续之前安装缺少的软件包。链接的问题有一个更详尽的讨论,在这里我不会尝试重复。